以高写入负载在 MySQL 中存储分层数据

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

你能澄清一下吗?您想存储所有这些并查询层次结构吗?您将如何查询? 【参考方案1】:

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

【讨论】:

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

嵌套集合有什么问题?

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

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

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

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

【讨论】:

+1 Joe Celko 在某处有一些很棒的帖子。我相信他的书“Joe Celko's SQL for smarties”也有一节。当然值得谷歌搜索。

以上是关于以高写入负载在 MySQL 中存储分层数据的主要内容,如果未能解决你的问题,请参考以下文章

在关系数据库中存储分层数据的选项都有哪些?

缓存分层(Ceph Mimic版本)

Mysql逻辑分层存储引擎

智能分层满足更高工作负载,亚马逊云科技加速云端存储服务创新

java mysql多次事务 模拟依据汇率转账,并存储转账信息 分层完成 dao层 service 层 client层 连接池使用C3p0 写入库使用DBUtils

MySQL中的分层关系数据库设计