这实际上取决于您的数据集。NoSQL 设计的第一条规则是首先定义您的查询场景。一旦你真正了解了如何查询数据,你就可以研究各种 NoSQL 解决方案。默认的分配单位是键。因此,您需要记住,您需要能够在节点机器之间有效地拆分数据,否则您最终将获得一个水平可扩展的系统,所有工作仍在一个节点上完成(尽管根据情况可以进行更好的查询)。
您还需要回想一下 CAP 定理,大多数 NoSQL 数据库是最终一致的(CP 或 AP),而传统的关系 DBMS 是 CA。这将影响您处理数据和创建某些事物的方式,例如密钥生成可能会变得诡计多端。
还请记住,在某些系统(例如 HBase)中没有索引概念。您的所有索引都需要由您的应用程序逻辑构建,并且任何更新和删除都需要这样管理。使用 Mongo,您实际上可以在字段上创建索引并相对快速地查询它们,还可以将 Solr 与 Mongo 集成。您不需要像在 HBase 中那样在 Mongo 中通过 ID 进行查询,HBase 是一个列族(又名 Google BigTable 样式数据库),其中您基本上具有嵌套的键值对。
因此,再一次涉及到您的数据、您想要存储的内容、您计划如何存储它,以及最重要的是您希望如何访问它。Lily 项目看起来很有前景。我参与的工作是从网络获取大量数据,然后存储、分析、剥离、解析、分析、流式传输、更新等。我们不只使用一个系统,而是使用许多系统最适合手头的工作。对于这个过程,我们在不同阶段使用不同的系统,因为它可以让我们快速访问我们需要的地方,提供实时流式传输和分析数据的能力,重要的是,我们可以随时跟踪所有内容(如产品中的数据丢失)系统很重要)。我正在使用 Hadoop、HBase、Hive、MongoDB、Solr、MySQL 甚至是好的旧文本文件。请记住,使用这些技术生产系统比在服务器上安装 Oracle 有点困难,有些版本不是那么稳定,您确实需要先进行测试。归根结底,这实际上取决于业务阻力水平和系统的关键任务性质。
迄今为止没有人提到的另一条路径是 NewSQL - 即水平可扩展的 RDBMS... 有一些像 MySQL 集群(我认为)和 VoltDB 可能适合您的原因。
再次谈到理解您的数据和访问模式,NoSQL 系统也是 Non-Rel 即非关系型的,并且可以更好地适应非关系型数据集。如果您的数据本质上是关系型的,并且您需要一些真正需要执行笛卡尔积(也称为联接)之类的 SQL 查询功能,那么您最好还是坚持使用 Oracle,并在索引、分片和性能调优方面投入一些时间。
我的建议是实际使用几个不同的系统。看着;
MongoDB - 文档 - CP
CouchDB - 文档 - 美联社
Redis - 内存键值(不是列族) - CP
Cassandra - 列族 - 可用和分区容错 (AP)
HBase - 列族 - 一致和分区容错 (CP)
Hadoop/Hive
VoltDB - 一个非常好看的产品,一个分布式的关系数据库,可能适用于您的情况(可能是一个更容易的举动)。它们似乎还提供了可能更适合产品环境的企业支持(即给企业用户一种安全感)。
无论如何,那是我的 2c。使用这些系统确实是您找出真正适合您的情况的唯一方法。