经典问题,刚好以前解决过,分享一下: 就是逻辑树,怎么存储的问题。
主要考虑点: 无限层次扩展 和 查询性能 矛盾的解决。
基本模式:
表: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) 特点:支持无限层次节点的树结构;
查询效率很高。
分享到:
相关推荐
它在处理大量数据和提供高效查询性能方面表现出色,同时也具有强大的扩展性,能够适应不断增长的数据需求。本篇文章将深入探讨SSAS在扩展性、性能优化方面的关键知识点。 **扩展性** 1. **多维模式与 tabular 模式...
它提供了一个可扩展的搜索解决方案,内置支持近实时搜索和多租户。 《ElasticSearch 可扩展的开源弹性搜索解决方案》将教你如何构建一个快速、灵活、可扩展的搜索解决方案,通过建立自定义集群进入ElasticSearch的...
本文将讨论 MySQL 分库分表无限扩容后的瓶颈及解决方案,旨在帮助开发者和架构师更好地掌握 MySQL 的核心技术,并提高数据库的性能和容量。 知识点: * MySQL 分库分表无限扩容后的瓶颈 * 解决方案:横向扩展、...
【基于词嵌入与扩展词交集的查询扩展】是一种信息检索领域的关键技术,旨在解决查询主题漂移和词不匹配的问题。查询扩展的基本思想是通过对原始查询进行修改或添加相关词汇,生成更长且更具语义的新查询,以更全面地...
无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar
Ceph 是一个高性能的分布式文件系统,能夠提供可靠、可扩展的存储解决方案。它的设计思想来源于分布式系统的研究,旨在解决大规模分布式文件系统中的元数据管理问题。 Ceph 的设计独特之处在于对对象存储层的独立...
分享视频教程——高性能高扩展的千亿级实时数据仓库全实现(通用企业级解决方案),本套课程可以满足世面上绝大多数大数据企业级的数据仓库业务场景,全部代码可以直接部署企业,支撑亿级并发数据分析。最后的项目...
给大家分享一套课程——高性能高扩展的千亿级实时数据仓库全实现(通用企业级解决方案),完整版178讲,提供源码和课件下载! 本课程凝聚讲师多年一线大数据企业实际项目经验,大数据企业在职架构师亲自授课,全程...
了解如何使用ADO.NET、Entity Framework或其他ORM工具进行有效的查询和事务管理,以及如何设计良好的数据库架构和索引,可以大幅提升性能。 5. **负载均衡和集群**:为了实现可扩展性,大型网站通常需要部署在多台...
高性能高扩展的千亿级实时数据仓库全实现(通用企业级解决方案),完整版178讲,提供源码和课件下载!本课程凝聚讲师多年一线大数据企业实际项目经验,大数据企业在职架构师亲自授课,全程实操代码,带你体验真实的...
EMC Isilon是一款专为企业级横向扩展NAS(网络附加存储)和大数据解决方案设计的技术,旨在应对日益增长的数据存储和管理挑战。该解决方案的核心是Isilon OneFS,一个经过7代优化的创新横向扩展操作系统,它为多种...
构建高性能可扩展ASP.NET网站.part1 构建高性能可扩展ASP.NET网站.part2
《存储容量可扩展区块链...该模型通过缓存策略、优化的查询机制、可扩展的存储管理和高效的数据结构,实现了在大规模区块链系统中快速、灵活的查询操作,为区块链技术在实际应用中的存储和查询性能提供了新的解决方案。
本文主要讨论了两种常见的数据库扩展方法:读写分离和分库分表(Sharding),并提及了CQRS(命令查询责任分离)概念。 读写分离是一种基本的数据库扩展策略,尤其适用于读多写少的业务场景。如文中所述,通过设置...
作者以DB2和Oracle两个主流大型关系数据库为例,详细论述了通过扩展SQL跟踪数据技术进行数据库性能诊断,并据此调整和优化数据库方案的过程。文章主要内容涵盖以下知识点: 1. 数据库性能诊断的重要性 数据库性能...
无限分类通常基于树状结构,每个节点都可以有任意数量的子节点,形成一个无限级别的分类层次。在数据库设计中,常见的实现方法有两种:使用自引用字段(self-referential)或使用路径枚举法(Path Enumeration)。自...
SQL Server的性能调优是确保数据库高效运行的关键环节,尤其对于解决查询速度慢的问题至关重要。以下将详细阐述文章中提到的五种方法: 1. 使用SQL DMV查找慢速查询: SQL Server的动态管理视图(DMV)提供丰富的...