我不太了解的是如何提高查询的效率。从我的理解,你将会抛出很多信息,这将有助于使查询更有效率,只需将你的结构数据库变成一大串键和值呢?
我完全错过了这一点吗?
你需要问的是,我的预期用例有切换的意义吗?
你有点错过了点。关键是你有时没有一个索引(就像你使用一般的关系数据库一样)。即使你有一个索引,将它们联系在一起的能力很困难,关系数据库如何表现。 Nosql解决方案具有许多新颖的结构,使许多用途简单易用,例如Redis是一个面向数据结构的数据库,非常适合快速构建任何具有队列或其pub-sub架构的内容。 MongoDB是一个自由格式的文档数据库,将文档存储为JSON(BSON),并且可以快速开发。 BigTable解决方案的结构不那么简单,但是扩展了一行的想法,即将列的系列 – 包含在每行中的键值对高效地排列在磁盘上。您可以使用ElasticSearch等技术构建一个反向索引。
不是一切都需要传统RDBMS的一致性保证或磁盘布局。 Nosql的另一个主要用例是巨大的可扩展性,许多解决方案(例如BigTable – HBase / Cassandra)被设计为轻松地分级和缩放(sql不容易)! Cassandra特别设计用于没有SPOF。此外,面向列的数据存储是通过顺序读取来优化磁盘速度(并减少write-amplification)。话虽如此,除非你真的需要它,一个传统的sql服务器通常是足够好的。
有优点和缺点。就个人而言,我使用两者的混合。使用正确的工具进行正确的工作,这可能会导致Postgresql或MysqL更频繁。
您可以使用一个基本的键值系统来创建一个带有两列的sql表,一个唯一的键和一个值。这是相当快的。您无需对数据进行任何关系或关联或整理。只需找到值并返回。这是一个过分简化,Nosql数据库确实有很多有趣的功能和应用程序,超越简单的K,V存储。
我不知道你的科学数据是否适合大多数Nosql实现,这取决于数据。如果你看HBase或Cassandra,它可能适合科学家的需要(使用适当的rowkey设计 – 时间戳不能先是查看OpenTSDB)。我知道许多公司通过使用随机顺序分隔器和传感器的UUID将读数存储在每天的脂肪行中,将传感器读数存储在Cassandra中。每天都会围绕特定用例创建新的数据库,以便答案可能会改变。对于特定的用例,您可以以灵活性和工具为代价获得巨大的奖励来使用特定的数据存储。