【问题标题】:Storing hierarchical data in MySQL with high write load以高写入负载在 MySQL 中存储分层数据
【发布时间】:2011-12-24 01:52:42
【问题描述】:

我正在构建 Web 应用程序,它应该具有高写入负载和数千甚至数百万表示用户定义/构造的树的分层记录。我不是想用线程建立论坛,而是用数千个小型层次结构(树多达 10-20 个后代)的庞大数据库......

我知道许多用于存储层次结构的模型 - 目前我正在使用嵌套集,但具有大量数据和负载的性能是个问题。我也怀疑邻接列表或类似的东西是否可以解决这个问题。

我一直在试验 Mongo 数据库,它是超快的键/值存储,但我只能使用 MySQL。

我想听听其他人遇到类似问题的经历。

【问题讨论】:

  • 你能澄清一下吗?您想存储所有这些并查询层次结构吗?您将如何查询?

标签: mysql tree hierarchy hierarchical


【解决方案1】:

如果你可以安装 MySQL 插件,那么OQGraph 存储引擎就是你所需要的。

【讨论】:

  • +1 但是安装插件并不是对所有人开放的。这就是为什么我将赏金授予@barryhunter
  • 谢谢 ;) 请记住,越多的人了解 OQGraph,我们就越早将其视为托管公司默认安装的一部分 :)
【解决方案2】:

嵌套集合有什么问题?

添加/删除节点时是否重新计算 lft/rgt 值?

可以肯定的是,通过一些仔细的计划,您可以对其进行调整,因此只需要进行罕见的重新计算。我还没有实际尝试过,但确实为系统做了一些规划(客户最终不想要系统!)

第一次计算时,将值乘以 1000。然后,如果您添加一个节点,您可以在值之间插入数字。只有当有大量插入时,您才会开始用完数字。低优先级批处理可以重新计算树以释放数字以进行新插入。

也可以通过操纵数字来存档删除。事实上,没有孩子的节点很容易。无需重新计算。如果是孩子会变得更复杂,但我认为应该是可行的。

【讨论】:

  • +1 Joe Celko 在某处有一些很棒的帖子。我相信他的书“Joe Celko's SQL for smarties”也有一节。当然值得谷歌搜索。
猜你喜欢
  • 2012-05-14
  • 2021-09-02
  • 2010-11-03
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多