开箱即用的自动水平扩展数据库

时间:2013-04-28 17:08:14

标签: database horizontal-scaling

我寻求DBMS:

  1. 水平开箱,没有或很少用手写的“胶水”
  2. 允许通过少数索引中的任何一个查询记录
  3. 易于维护和扩展(即我们只是添加新服务器和DBMS自己重新分配数据)
  4. 目标是重新设计并最终从当前解决方案(基于Oracle RAC)迁移。旧解决方案的问题在于设计和代码质量差,而不是Oracle本身。

    关于我们的数据。我们有两种类型的记录:节点和事件。两者都添加到db并且从不删除。大约有2e9个节点和5e11个事件。每个事件都绑定到一个节点。我们需要的查询是:

    1. 通过少数属性n1,n2,n3
    2. 查询节点
    3. 按节点ID查询节点
    4. 按时间间隔查询事件及其主要属性e1
    5. 按node_id
    6. 查询事件

      当然,我们需要插入新的节点和事件。查询1-4的数量是每天几千,并且不会增长很多,但所有数据都需要可访问。每天新事件的数量大致等于节点数。每天新节点的数量最多只有几百个。

      我们不需要事务或连接来保持一致性,因为数据在插入后始终是一致的并且永远不会被删除。我们可以使用单独的postgres服务器(并手动调度查询)来实现它,但是有更好的方法吗?我们会考虑适合我们任务的任何(SQL或NoSQL)开源数据库。我们也不受任何特定语言的约束。优先考虑的是易于扩展,同时保持良好的查询速度。

1 个答案:

答案 0 :(得分:0)

您可能需要查看Riak。它是一种以可靠性,易于扩展以及高度可用于读写的KVS而闻名。它碰巧是用erlang编写的,但是你不需要知道任何关于erlang的知识就可以使用它。您可以通过http和协议缓冲区与它通信。

因为它是KVS,你可以解决(2)和(4)只需购买通过id存储你的数据。为了得到(1)和(3)你可能需要使用secondary indexes(又名2i)。你没有提到(1)和(3)的性能要求,但我的理解是2i比常规读取慢得多,所以你可能需要关注性能测试。

无论如何,看看use cases,看看riak是否合适。此外,关于他们vimeo channel的生产中有很多关于riak的精彩故事。