def build_index(): # 先删除老的索引 for key, value in dbutil.prefix_iter("note_tiny:", include_key=True): dbutil.delete(key) # old key to new key for item in dbutil.prefix_iter("note_full:"): put_note_tiny(item) migrate_note_recent() return "迁移完成!"
def migrate_note_recent(): recent_list = dbutil.prefix_iter("note_recent", include_key=True) for key, item in recent_list: dbutil.delete(key) for item in dbutil.prefix_iter("note_tiny"): if item.type != "group": dbutil.zadd("note_recent:%s" % item.creator, item.mtime, item.id) if item.is_public: dbutil.zadd("note_recent:public", item.mtime, item.id) return "迁移完成!"
def migrate_note_tags(): db = xtables.get_file_tag_table() count = 0 for item in db.select(): note_id = item.file_id creator = item.user note_key = build_note_full_key(note_id) note = dbutil.get(note_key) if note != None: tag_set = set() if note.tags != None: tag_set.update(note.tags) tag_set.add(item.name) note.tags = list(tag_set) # 更新入库 dbutil.put(note_key, note) put_note_tiny(note) count += 1 for item in dbutil.prefix_iter("note_tiny"): note_id = str(item.id) note_tag_key = "note_tags:%s:%s" % (item.creator, note_id) note_tag = dbutil.get(note_tag_key) if note_tag is None and item.tags != None: dbutil.put(note_tag_key, Storage(note_id=note_id, tags=item.tags)) count += 1 return "迁移完成,标签数量: %s" % count
def migrate_note_full(): # sqlite to leveldb db = xtables.get_note_table() content_db = xtables.get_note_content_table() for item in db.select(): note_key = build_note_full_key(item.id) ldb_value = dbutil.get(note_key) # 如果存在需要比较修改时间 if ldb_value and item.mtime >= ldb_value.mtime: build_full_note(item, content_db) dbutil.put(note_key, item) if ldb_value is None: build_full_note(item, content_db) dbutil.put(note_key, item) # old key to new key for item in dbutil.prefix_iter("note.full:"): new_key = build_note_full_key(item.id) new_value = dbutil.get(new_key) if new_value and item.mtime >= new_value.mtime: dbutil.put(new_key, item) if new_value is None: dbutil.put(new_key, item) return "迁移完成!"
def find_visit_log(user_name, url): for key, log in dbutil.prefix_iter("plugin_visit_log:%s" % user_name, include_key=True): if log.url == url: log.key = key return log return None
def list_comments(note_id): comments = [] for key, value in dbutil.prefix_iter("note_comment:%s" % note_id, reverse=True, include_key=True): comment = value comment['id'] = key comments.append(comment) return comments
def migrate_note_full(): # sqlite to leveldb db = get_note_table() if db: migrate_note_from_db() # old key to new key for item in dbutil.prefix_iter("note.full:"): new_key = build_note_full_key(item.id) new_value = dbutil.get(new_key) if new_value and item.mtime >= new_value.mtime: dbutil.put(new_key, item) if new_value is None: dbutil.put(new_key, item) return "迁移完成!"
def migrate_note_history(): # sqlite to kv db = xtables.get_note_history_table() for item in db.select(): dbutil.put("note_history:%s:%s" % (item.note_id, item.version), item) # old_key to new_key for item in dbutil.prefix_iter("note.history"): # 这里leveldb第一版没有note_id,而是id字段 old_key = "note.history:%s:%s" % (item.id, item.version) new_key = "note_history:%s:%s" % (item.id, item.version) new_value = dbutil.get(new_key) if new_value and (new_value.mtime is None or item.mtime > new_value.mtime): dbutil.put(new_key, item) dbutil.delete(old_key) if new_value is None: dbutil.put(new_key, item) dbutil.delete(old_key) return "迁移完成!"