我在一家处理后端系统负载问题的大公司工作。他们正在寻找替换旧的遗留系统/数据库,并将其替换为可水平扩展的NoSQL数据库。通过使用水平可扩展的解决方案,查看NoSQL数据库的原因是为未来做好准备。
分布式NoSQL数据库通常只提供最终的一致性。这有多少问题还有待研究。在这种情况下,我们处理的是一个系统,其中写入操作和读取数量相对较少,并且可用性很重要。
有一些NoSQL数据库系统(cassandra,mongoDB,hbase等)。是否有任何指南或有哪些文献可用于哪些数据库系统适用于哪些情况?我还希望了解出现不一致问题的可能性,以及如何降低这种机会和成本。
欢迎任何有关文献的资料/提示/参考资料。
答案 0 :(得分:0)
那里有大量信息...... Google是你的朋友:)
我强烈推荐Cassandra。它设置起来相当容易,并且是无主的+容错的。您可以指定每个数据库需要多少复制,并为您处理。它还可以进行跨数据中心复制。它具有可调整的一致性。如果需要,对于某些数据位,您可以实现完全一致性(例如,在写入期间牺牲可用性)。因此,它不一定是全有或全无的情况。它具有模式的概念,您可以使用主键将数据作为行存储在表中。它有一种查询语言CQL,它对SQL非常熟悉(但更有限)。熟悉,架构,性能,可调整的一致性....非常好的组合。
有缺点。没有连接。因此,您必须更多地关注数据建模,并了解实时工作所需的查询类型。概念数据模型可能与实际的物理数据模型不同。您可能会在非规范化物理表中将某些信息(即概念数据)作为副本存在。这会带来非常快的性能,但您需要稍微了解一下数据。
对于分析查询,您通常会将其与Spark配对。这将允许您查询数据集,就像Hadoop一样。查询比实时查询速度慢,但可以在总数据量和查询灵活性之间取得良好的平衡。
Cassandra本身不会是全文搜索引擎。但是,将它与Lucene或Solr配对以提供搜索功能并不罕见。
就用例而言,Cassandra可以以多种形式使用。最简单的是,它是一个键值存储,其中每个值都是有序键值对的集合。顶级键值为您提供数据的分区(分片)。这使您可以非常有效地存储时间序列数据。 “值”也支持集合,映射和列表的集合列,您可以在这些集合上使用“完全匹配索引”。这些允许稍微更灵活的查询。这些功能意味着Cassandra可用于各种用例,但显然不是全部。这实际上取决于您尝试解决的用例。那里没有单一的“最佳NOSQL”数据库。每个数据存储都倾向于有一组用例,并且很难列出所有映射。相反,您必须查看您的用例是什么,然后查看哪个商店的功能最重叠,然后选择一个或更多。