有关构建快速分布式数据库的建议

时间:2009-05-30 22:49:42

标签: database database-design data-structures

我目前正在研究一个涉及查询大量数据(数十亿行)的问题,并且对这种类型的东西缺乏经验,会喜欢一些聪明的建议。

数据/问题如下所示:

  1. 每个表都有2-5个键列和1个值列。
  2. 每一行都有一个独特的密钥组合。
  3. 我需要能够通过任何键子集进行查询(例如key1 ='blah'和key4 ='bloo')。
  4. 能够快速插入新行(如果行已存在则更新值)会很高兴,但如果我能慢慢地这样做,我会感到满意。
  5. 目前我在MySQL上实现了这一功能,在一台机器上运行,每个键上都定义了单独的索引,一个索引跨越所有键(唯一),一个索引组合了第一个和最后一个键(这是当前最常见的查询我'制作,但这很容易改变)。不幸的是,这很慢(并且索引最终占用了大约10倍的磁盘空间,这不是一个大问题。)

    我碰巧有一大堆快速计算机供我使用(~40),这使得这台单机数据库令人难以置信的缓慢变得更加烦人。我想利用所有这些功能来快速建立这个数据库。我已经考虑过构建一个分布式哈希表,但这样就很难只查询一部分密钥。似乎像BigTable / HBase这样的东西会是一个不错的解决方案,但我还不相信更简单的解决方案不存在。

    非常感谢,非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

我建议您收听此播客,了解有关分布式数据库的一些优秀信息。 episode-109-ebays-architecture-principles-with-randy-shoup

答案 1 :(得分:0)

指出明显的:你可能是磁盘绑定。

在某些时候,如果您正在进行随机查询并且您的工作集比RAM大得多,那么您将受到磁盘可以执行的少量随机IOPS的限制。每个连接的磁盘每秒都不会有几十个子查询。

如果你遇到了这个瓶颈,你可能会通过切换到SSD,更大的RAID或大量RAM而获得更多,而不是通过在许多计算机之间分配数据库来获得更多(这通常会让你获得更多最后两个资源)