经典问题,刚好以前解决过,分享一下: 就是逻辑树,怎么存储的问题。
主要考虑点: 无限层次扩展 和 查询性能 矛盾的解决。
基本模式:
表: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 模式...
本文将讨论 MySQL 分库分表无限扩容后的瓶颈及解决方案,旨在帮助开发者和架构师更好地掌握 MySQL 的核心技术,并提高数据库的性能和容量。 知识点: * MySQL 分库分表无限扩容后的瓶颈 * 解决方案:横向扩展、...
Mellanox 横向扩展数据库解决方案 Mellanox 横向扩展数据库解决方案是基于 Mellanox 56Gb/s ...Mellanox 横向扩展数据库解决方案能够提供高性能和高可用性的数据库解决方案,满足大规模数据存储和处理的需求。
【基于词嵌入与扩展词交集的查询扩展】是一种信息检索领域的关键技术,旨在解决查询主题漂移和词不匹配的问题。查询扩展的基本思想是通过对原始查询进行修改或添加相关词汇,生成更长且更具语义的新查询,以更全面地...
无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar无限扩展的年份选择.rar
Ceph 是一个高性能的分布式文件系统,能夠提供可靠、可扩展的存储解决方案。它的设计思想来源于分布式系统的研究,旨在解决大规模分布式文件系统中的元数据管理问题。 Ceph 的设计独特之处在于对对象存储层的独立...
分享视频教程——高性能高扩展的千亿级实时数据仓库全实现(通用企业级解决方案),本套课程可以满足世面上绝大多数大数据企业级的数据仓库业务场景,全部代码可以直接部署企业,支撑亿级并发数据分析。最后的项目...
了解如何使用ADO.NET、Entity Framework或其他ORM工具进行有效的查询和事务管理,以及如何设计良好的数据库架构和索引,可以大幅提升性能。 5. **负载均衡和集群**:为了实现可扩展性,大型网站通常需要部署在多台...
高性能高扩展的千亿级实时数据仓库全实现(通用企业级解决方案),完整版178讲,提供源码和课件下载!本课程凝聚讲师多年一线大数据企业实际项目经验,大数据企业在职架构师亲自授课,全程实操代码,带你体验真实的...
构建高性能可扩展ASP.NET网站中文版(带目录)。针对ASP.NET网站开发中可能遇到的问题,给出了经过实践检验的具体解决方法。涉及的内容包括:加快显示HTML的方法、缓存的最佳方式、如何使用IIS、如何处理会话状态、...
为了区分与原查询正负相关的扩展词,提高查询扩展性能,将正负关联规则挖掘技术应用于查询扩展,提出一种基于关联规则[q→ti]和[q→?tj]挖掘的局部反馈查询扩展算法。该算法从初检的前列文档中挖掘只含查询词项的词...
无限分类通常基于树状结构,每个节点都可以有任意数量的子节点,形成一个无限级别的分类层次。在数据库设计中,常见的实现方法有两种:使用自引用字段(self-referential)或使用路径枚举法(Path Enumeration)。自...
PolarDB是一个国产化的高性能数据库,它基于PostgreSQL数据库,具有流复制、跨节点并行、并行DML等特点,能够提供高性能、高可靠性和高扩展性的数据库解决方案。 PolarDB的核心特点是流复制的主备库,可以共享一份...
SQL Server的性能调优是确保数据库高效运行的关键环节,尤其对于解决查询速度慢的问题至关重要。以下将详细阐述文章中提到的五种方法: 1. 使用SQL DMV查找慢速查询: SQL Server的动态管理视图(DMV)提供丰富的...
基于微软高性能计算平台HPC Server和查询扩展策略,设计实现了一个分布式文本检索系统 DQSSQE.实验结果表明,在检索性能方面,所提出的查询扩展策略能够有效的提高查准率,召回率上也有一定的提高;在分布式检索...
在优化问题的解决中,Lingo是一款强大的数学建模语言和求解器,而Lingo11.0更是其扩展版,尤其针对大规模变量的问题提供了卓越的支持。这款软件允许用户在模型中使用几乎无限数量的变量,从而轻松应对那些在传统工具...
标题 "PHP环境安装swoole-loader扩展" 涉及到的是在PHP环境中添加Swoole扩展,这是一个用于提升PHP性能的重要工具...无论是开发大型的互联网应用,还是对现有项目进行性能优化,Swoole都是一个非常值得考虑的解决方案。
本文主要介绍了两种常见的端口扩展方式:级连扩展和堆叠技术。 **级连扩展**是最基础的扩展方法,尤其在早期网络建设中,常常使用集线器(HUB)进行级连,以增加网络接入点。然而,这种模式下网络性能受到限制,...