我有一份所有国家的名单 - >州 - > XML文件中的城市( - >小学/村庄等),例如,使用XML(使用xml解析器)检索一个州的所有城市,它们非常快速。
我想知道,如果我把所有这些信息都放在mysql中,那么就像使用XML一样快速检索一个州的所有城市?因为XML用于存储分层数据,而像mysql这样的关系数据库则不是。
该列表包含500 000个实体。所以我想知道它是否与XML一样快:
邻接列表模型
嵌套集模型
我应该使用哪一个?原因(理论上)在一个州内可能存在无限级别(我听说邻接对于无限的子级别来说并不好)。这个庞大的数据集哪个最快?
谢谢!
答案 0 :(得分:3)
在this article中,Quassnoi在层次结构中创建一个包含2,441,405行的表,并测试嵌套集和邻接列表的高度优化查询的性能。他运行各种不同的测试,例如获取祖先或后代并对结果进行计时(阅读文章以获取有关测试内容的详细信息):
Nested Sets Adjacency Lists All descendants 300ms 7000ms All ancestors 15ms 600ms All descendants up to a certain level 5000ms 600ms
他的结论是,对于MySQL,嵌套集的查询速度更快,但缺点是更新速度要慢得多。如果您不经常更新,请使用嵌套集。否则更喜欢邻接列表。
您可能还希望考虑使用另一个支持递归CTE的数据库是否适合您。
我认为这个大小的XML文件需要花费相当长的时间来解析,但是如果你可以将解析后的结构缓存在内存中而不是每次从磁盘读取它,那么对它的查询将非常快。 / p>
请注意,使用MySQL存储层次数据的主要缺点是它需要一些非常复杂的查询。虽然您可以从我链接的文章中复制代码,但如果您需要稍微修改它,那么您将必须了解它是如何工作的。如果您希望保持简单,那么XML肯定具有优势,因为它是针对此类数据而设计的,因此您应该能够轻松地创建所需的查询。