以高写入负载在 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 中存储分层数据的主要内容,如果未能解决你的问题,请参考以下文章
java mysql多次事务 模拟依据汇率转账,并存储转账信息 分层完成 dao层 service 层 client层 连接池使用C3p0 写入库使用DBUtils