经典问题,刚好以前解决过,分享一下: 就是逻辑树,怎么存储的问题。
主要考虑点: 无限层次扩展 和 查询性能 矛盾的解决。
基本模式:
表:Location
编码 |
名称 |
父编码 |
CN |
中国 |
|
ZJ |
浙江省 |
CN |
HZ |
杭州市 |
HZ |
XH |
滨江区 |
HZ |
NB |
宁波市 |
ZJ |
优点: 模型简约而不简单, 支持任意层次扩展。
缺点:查询一个节点的所有子节点需要递归,效率不高。
一般解决: Oracle 中有这个语句可以解决查询问题 select * from XXX start with id=76 connect by prior parentid=id。 但是数据量大时效率有影响。
更好的解决:用好Cache。 一般这类数据都比较固定,而且量不会非常大,使用Cache,无论是程序递归查询,还是 connect by prior 语句,问题都不大。
索引表支持
如果属性结构数据量比较大或变动频繁, 应用比较关注性能,可以增加一个索引表来解决
行政区划索引表 ( Location_Index ) ( 主键:ID, PID)
编码 |
上线编码(非父级(PID)) |
相差存次(offset) |
CN |
|
|
ZJ |
CN |
1 |
HZ |
CN |
2 |
HZ |
ZJ |
1 |
XH |
CN |
3 |
XH |
ZJ |
2 |
XH |
HZ |
1 |
这张索引表以扁平化结构存储任意层次两个节点间的关系。检索效率很高:
1.查询任意节点的子节点: select * from Location_Index where PID = ‘ZJ’;
2.查询任意节点的所有父节点: select * from Location_Index where ID = ‘XH’;
3.判断任意两个节点是否在同一分支上: select * from Location_Index where ID = ‘XH’ and PID = ‘CN’;
当然,高性能是以空间和处理复杂度为代价的。
a) 新增一个节点时:除了要在 Location 表中增加一条记录, 同时要在 Location_Index 表增加 若干条记录。
b) 删除一个节点是,除了要在 Location 表中增加一条记录, 同时要在 Location_Index 表删除 若干条记录。
当然,这个逻辑并不复杂。而且 Location_Index 所增加的空间也是值的的。原来的 0001.0001这样的索引可以不需要,也能节省很多空间。
总结:
1) 表结构:基本表和索引表, Location,Location_Index。
2) 特点:支持无限层次节点的树结构;
查询效率很高。
分享到:
相关推荐
它提供了一个可扩展的搜索解决方案,内置支持近实时搜索和多租户。 《ElasticSearch 可扩展的开源弹性搜索解决方案》将教你如何构建一个快速、灵活、可扩展的搜索解决方案,通过建立自定义集群进入ElasticSearch的...
易语言_扩展库 易语言 的无限支持扩展库
RadonDB是一个开源的云原生MySQL数据库,具有无限的可扩展性和性能
本文主要通过一下几个方面介绍:使用SQLDMV查找慢速查询、通过APM解决方案查询报告、SQLServer扩展事件、SQLAzure查询性能洞察等相关内容。本文来自博客园,由火龙果软件Anna编辑、推荐。SQLServer的一个重要功能是...
选择的脚本语言是PHP,PHP打开MSSQL和MySQL扩展,对这两个数据库操作都是很容易的问题。 问题就出现在SQLServer中表的字段名是中文,写好的查询语句在SQLServe里测试是通过有记录返回,用PHP的MSSQL扩展查询就是报错...
《SQL Server 2008查询性能优化》指出的性能要点之一是数据库随着用户和数据的日益增多而进行扩展的必要性。你需要理解性能低下的起因。以及识别并修复它们的方法。《SQL Server 2008查询性能优化》将帮助你: 使用...
SSAS的扩展性、性能与优化 SSAS的扩展性、性能与优化
xwxyh无限扩展库 (1.0#1版).lpk
用javascript做的无限扩展树
张量层次代数是一个非矛盾的超代数,通常是无穷大的,是扩展几何的结构代数的双重扩展。 我们使用它来基于有限维结构组,针对扩展几何的L∞代数,对轨距结构进行(部分)分析。 在这些情况下,还会给出不变的伪动作...
《构建高性能可扩展ASP.NET网站》由Richard Kiessig所著,针对ASP.NET网站开发中可能遇到的问题,给出了经过实践检验的具体解决方法。涉及的内容包括:加快显示HTML的方法、缓存的最佳方式、如何使用IIS、如何处理...
简单、高性能、优雅的php c扩展框架
无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar
易语言学习-xwxyh无限扩展库 (1.0#1版)静态版.zip
基于飞思卡尔处理器的安全设备解决方案将扩展性、性能和能效提高到新的水平.pdf
《构建高性能可扩展ASP.NET网站》针对ASP.NET网站开发中可能遇到的问题,给出了经过实践检验的具体解决方法。涉及的内容包括:加快显示HTML的方法、缓存的最佳方式、如何使用IIS、如何处理会话状态、如何配置SQL ...
java密码扩展无限制权限策略文件 下载解压后,把jar文件上传到需要安装jce机器上JDK或JRE的security目录下,覆盖源文件即可。 JDK:将两个jar文件放到%JDK_HOME%\jre\lib\security下 JRE:将两个jar文件放到%JRE_...
此为《构建高性能可扩展ASP.NET网站》一书的源码 让ASP.NET + SQL Server网站飞 迅速提升网站性能,全面挖掘网站潜力 微软资深技术专家力作,亚马逊全五星评价 本书针对ASP.NET 网站开发中可能遇到的问题,给出了...
Leevel 高性能 PHP 扩展开发框是一个开源 PHP C 扩展开发框架,采用 zephir 编写,是为了解决使用框架带来性能下降的经典矛盾,Leevel 是为了解决 QueryPHP 性能而开发,可以与同版本的 QueryPHP 混合使用,将接管 ...