Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL或NoSQL数据库中的许多小型树结构_Sql_Database Design_Nosql_Hbase_Hierarchical Trees - Fatal编程技术网

SQL或NoSQL数据库中的许多小型树结构

SQL或NoSQL数据库中的许多小型树结构,sql,database-design,nosql,hbase,hierarchical-trees,Sql,Database Design,Nosql,Hbase,Hierarchical Trees,我想在数据库中存储许多不同树中节点的信息 首先,将有超过20000个节点在500棵树之间共享,每个节点将有5个数字属性。一旦构建完成,每个节点都需要引用它的所有直接子节点,而不需要引用其他节点 我需要在初始化时在内存中构建所有树,并在程序进入停机状态时更新/添加节点(可能每小时左右,尽管越多越好) 我看过sql邻接模型,它似乎需要花费太长的时间来构造每个表(必须进行太多的db调用),嵌套集模型是一种可能性,但扩展树更为复杂,这是经常发生的事情,它增加了数据库的复杂性,因为我认为这可能是一个非常基

我想在数据库中存储许多不同树中节点的信息

首先,将有超过20000个节点在500棵树之间共享,每个节点将有5个数字属性。一旦构建完成,每个节点都需要引用它的所有直接子节点,而不需要引用其他节点

我需要在初始化时在内存中构建所有树,并在程序进入停机状态时更新/添加节点(可能每小时左右,尽管越多越好)

我看过sql邻接模型,它似乎需要花费太长的时间来构造每个表(必须进行太多的db调用),嵌套集模型是一种可能性,但扩展树更为复杂,这是经常发生的事情,它增加了数据库的复杂性,因为我认为这可能是一个非常基本的结构和查询集

我也研究过MongoDb,但它似乎更倾向于JSON类型的对象,我使用的是java,可能是过度杀戮,还有HBase,它肯定会过度杀戮(优点是如果节点数量变得巨大,它可能会有用,这是未来的一种可能性,我可以增加对DB的写入时间,这也是一个优点)

有人对我该怎么做有什么建议吗

NoSql dbs是否过火了?它们在存储树结构方面是否更好?在sql数据库旁使用它们是否是一种糟糕的做法?

如果您删除
(rgt-lft-1)/2
在嵌套集上生成子属性的数量,并对lft/rgt列使用浮点数,您可以在最短的时间内插入/更新/删除节点

这样做的主要问题是避免与精度相关的问题。您可以通过将lft/rgt转换为numeric并返回到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+,则可以使用适用于此类场景的新数据类型。

与在Postgres中使用类似。:-)