这真的取决于你的数据集。 NoSQL设计的首要规则是首先定义您的查询场景。一旦你真正了解你想要如何查询数据,那么你可以看看那里的各种NoSQL解决方案。分配的默认单位是关键。因此,您需要记住,您需要能够有效地在节点机器之间分割数据,否则最终将得到一个水平可伸缩的系统,并且所有工作仍在一个节点上完成(尽管根据情况可以更好地进行查询)。
您还需要回想一下CAP定理,大多数NoSQL数据库最终是一致的(CP或AP),而传统的关系数据库管理系统是CA.这会影响你处理数据和创建特定事物的方式,例如密钥生成可能会带来诡计。
还记得比在HBase等系统中没有索引概念。您的所有索引都需要由应用程序逻辑构建,并且任何更新和删除都需要按照这种方式进行管理。有了Mongo,你可以在字段上创建索引并相对快速地查询索引,也可以将Solr与Mongo集成。您不仅需要在Mongo中通过ID进行查询,就像您在HBase中所做的那样,它是一个列家族(又名谷歌BigTable样式数据库),您基本上拥有嵌套的键值对。
因此,再次涉及到您的数据,您想要存储的内容,您计划如何存储它,最重要的是您希望如何访问它。莉莉项目看起来很有希望。我参与的工作是从网络上获取大量数据,并存储,分析,剥离,分析,分析,流式处理,更新等。我们不仅仅使用一个系统,而是使用多个系统这最适合手头的工作。对于这个过程,我们在不同的阶段使用不同的系统,因为它使我们能够在需要的地方快速访问,提供了实时流式处理和分析数据的能力,重要的是,随时了解所有事情(如数据丢失)系统是一件大事)。我使用Hadoop,HBase,Hive,MongoDB,Solr,MySQL甚至是优秀的旧文本文件。请记住,使用这些技术生产系统比在服务器上安装Oracle要困难一些,某些版本不够稳定,而且您确实需要首先进行测试。在这一天结束的时候,它确实取决于业务阻力水平和系统的关键任务性质。
到目前为止,还没有人提到过的另一种路径是NewSQL--即水平可伸缩的RDBMSs ......有一些像MySQL集群(我认为)和VoltDB可能适合您的原因。
它再次涉及到了解您的数据和访问模式,NoSQL系统也是非Rel,即非关系型,并更适合非关系型数据集。如果您的数据具有固有的关系性,并且您需要一些SQL查询功能,而这些功能确实需要做笛卡尔产品(又名连接),那么您最好坚持使用Oracle,并投入一些时间进行索引,分片和性能调整。
我的建议是实际上玩几个不同的系统。看着;
的MongoDB - 文档 - CP
的CouchDB - 文档 - AP
Redis的 - 在存储器键值(未列族) - CP
卡桑德拉 - Column Family - Available &分区容错(AP)
HBase的 - 柱族 - 一致&分区容错(CP)
Hadoop的/蜂房
VoltDB - 一个非常漂亮的产品,被分发和可能工作的关系数据库中的案例(可能更容易)。他们似乎也提供了可能更适合产品环境的企业支持(即为企业用户提供安全感)。
任何方式,这是我的2c。玩弄这些系统真的是你找出真正适合你的案例的唯一方法。
你能分解数据吗? –
如果通过ID查找是BigTable或MongoDB的潜在选项,为什么它不是SQL的潜在选项? –
你的数据看起来像什么? – NightWolf