项目中要存储一个树形结构。之前采用的是每条数据带一个 parent_id 这种邻接表的方案。
然而这个方案查询所有下级节点的时候,需要迭代查询,所以效率非常低,所以考虑优化。
一番 google 之后,选择了 Closure Table 闭包表的方案,这个方案查询所有上级节点或所有下级节点的效率都非常高。但是这个方案在序列化数据的时候依然很麻烦。
前端要求组织的数据格式如下: { "id": "1", "name": "root", "children": [ { "id": "2", "name": "aaa", "children": [] } ] }
现在序列化采取的方案是:
def insertNode(result, node, query_result):
node_id = node['id']
parent_id = node['parent']
if findNode(result, node_id) is None:
parent = findNode(result, parent_id)
if parent is None:
result = insertNode(result, query_result[parent_id], query_result)
parent = findNode(result, parent_id)
parent['children'].append(node)
return result
def findNode(result, node_id):
if result.get('id', None) == node_id:
return result
else:
for node in result.get('children', []):
target = findNode(node, node_id)
if target is not None:
return target
return None
if __name__ == '__main__':
result = {}
for node in nodes:
result = insertNode(result, node, query_result)
print(json.dumps(result))
总之,我就想问下各位大佬,这个方案靠谱么?
如果靠谱,还有什么地方可以优化?
如果不靠谱,我应该怎么做?
1
1iuh OP 6 小时惨案~ 没有大佬指点一下么?
|
2
HanSonJ 2017-08-02 01:01:38 +08:00
但看文字没看出跟原本的递归有何差别
|