如何解决SQL或NoSQL数据库中的许多小树结构
|| 我想将信息存储在数据库中许多不同树中的节点上。 首先,将在500棵树之间共享2万多个节点,每个节点将具有5个数字属性。一旦构建,每个节点都需要引用其所有直接子节点,而无需其他节点。 我需要在初始化时在内存中构建所有树,并在程序进入停机时间(也许每小时左右,尽管越多越好)后更新/添加节点。 我看过sql邻接模型,看来构建每个表将花费太长时间(必须进行过多的db调用),嵌套集模型是可能的,但扩展树则更复杂,这就是将会发生很多事情,并且增加数据库的复杂性,因为我认为这可能是一个非常基本的结构和查询集。 我也看过MongoDb,但它似乎更适合JSON类型的对象,并且我使用的是Java,可能会导致过度杀戮,而HBase显然会导致过度杀灭(好处是,如果节点数量变大,它可能会出现有用,这是将来的可能性,我可以增加对数据库的写入时间,这也是一个优势) 有人对我该如何处理有任何建议吗? NoSql数据库是否过度杀伤力?它们在存储树结构方面是否更好?将其与侧面sql数据库一起使用是否不好?解决方法
如果将嵌套集上的“ 0”产量子级属性删除,并为lft / rgt列使用浮点数,则可以在最短的时间内插入/更新/删除节点。
这样做的主要问题是避免与精度有关的问题。您可以通过将lft / rgt强制转换为数字然后返回float来解决后者,以获得规范的表示形式。 Postgres示例:
select (.1::float + .7::float) * 10::float; -- 8
select floor((.1::float + .7::float) * 10::float); -- 7
select floor(((.1::float + .7::float) * 10::float)::numeric::float); -- 8
另一个问题相当容易管理,并且在空间用尽时会发生:您有时需要重新索引树的部分或全部-它需要锁定树,但是它足够快,因此无需重新索引即可。影响正常运作。
, 如果您使用的是SQL Server 2008+,则可以使用适用于此类情况的新的HierarchyID数据类型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。