2009-05-30 34 views
2

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

数据/问题看起来像这样:

  1. 每个表具有2-5键列和1个值列。
  2. 每一行都有一个唯一的键组合。
  3. 我需要能够通过键的任何子集进行查询(即key1 ='blah'和key4 ='bloo')。
  4. 如果能够快速插入新行(如果该行已经存在,则更新该值)会很好,但是如果我可以慢慢做到这一点,我会很满意。

目前,我有这个在一台机器上的每个键定义单独的索引上运行MySQL的实现,在所有的键(唯一的)一个指数和一个指数相结合的第一和最后一个键(这是目前最常见的我正在查询,但可以很容易地改变)。不幸的是,这个速度很慢(而且索引最终占用了磁盘空间的10倍,这不是一个大问题)。

我恰好有一大堆快速的计算机可供我使用(〜40),这让这台单机数据库的令人难以置信的速度变得更加令人讨厌。我想利用所有这些功能来快速创建这个数据库。我已经考虑过构建一个分布式散列表,但是这样会很难仅查询一部分键。看起来像BigTable/HBase是一个体面的解决方案,但我还不确信更简单的解决方案不存在。

非常感谢,任何帮助将不胜感激!

回答

0

要指出显而易见的事实:您可能是磁盘绑定的。

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

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