1

我寻求 DBMS:

  1. 开箱即用水平缩放,没有或几乎没有手写“胶水”
  2. 允许通过少数索引中的任何一个查询记录
  3. 易于维护和扩展(即我们只需添加新服务器,DBMS 自行重新分配数据)

目标是重新设计并最终从当前解决方案(基于 Oracle RAC)迁移。旧解决方案的问题在于它的设计和代码质量很差,而不是 Oracle 本身。

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

  1. 根据节点的少数属性 n1、n2、n3 查询节点
  2. 按 node_id 查询节点
  3. 按时间间隔及其主要属性 e1 查询事件
  4. 按 node_id 查询事件

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

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

4

1 回答 1

0

您可能想看看Riak。它是一个以可靠性、易于扩展和读写高度可用而闻名的 KVS。它恰好是用 erlang 编写的,但是您不需要了解任何有关 erlang 的知识就可以使用它。您可以通过 http 和协议缓冲区与它对话。

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

无论如何,看看用例,看看 riak 是否适合。此外,在他们的vimeo 频道上有很多关于 riak 的精彩故事。

于 2013-04-28T19:06:00.047 回答