由于我使用的是 PostgreSQL,因此有一个名为ltree的模块,它至少满足了我的一个需求,即性能(我不知道可伸缩性?有人说物化路径树不能很好地伸缩......)。
由于我正在开发的应用程序是一个完全围绕一棵大树、节点、子树等构建的 CMS,因此在对这些节点进行排队时,性能是绝对必要的,但由于它是一个分层的大树(随着它的增长),你正在处理和操作GUI(CRUD),我还想让用户在正确更新数据库中的树(子记录)的同时拖放以重新排序节点、子树等。
据我了解,在树中移动和重新排序节点/子树并不是 ltree/物化路径树的真正用途,所以我希望你能帮助我指出正确的树结构模型是最好的为了性能和移动子树和节点,或者……如果 ltree 确实不是过去的遗留物,但仍然值得使用,你如何使用 PostgreSQL 的 ltree 模块来实现这一点?在这种情况下为什么/为什么不使用 ltree?
要求:
- 查询性能当然是我的首要任务(所有节点、子树、叶子)。
- 树应该支持深层嵌套和排序
- 当然,树应该支持变大和扩展
- 如果不存在 1 个“万事通”树实现,或者太复杂而不值得,我可以在从 GUI 重新排序时忍受一点等待时间。
我也在考虑闭包表,也就是桥表(很多!),嵌套间隔(不确定我是否完全理解如何实现它,目前没有好的例子或要点?)或 B-tree 模型。我只是不太确定,这些将如何满足我的上述 4 个要求。以嵌套间隔重新组织子树和节点似乎很简单,性能似乎也不错。很难选择合适的。
因为我肯定需要性能(查询/读取性能)、可伸缩性、排序,所以我有点认为带有排序顺序的闭包表可能非常接近,但我无法想象闭包表和磁盘空间开销会变成我的树有多大节点变大。闭包表和可扩展性,我不太确定。我担心这个问题有错吗?这项任务的最佳解决方案可能是什么?