nosql 支持什么“规模”的应用程序?

sre*_*ree 3 nosql scalability database-theory

最近我遇到了 Nosql 数据库概念,虽然我学会了如何使用它以及为什么使用它,但我没有得到正确答案,它支持什么规模的项目?

它是否支持更大的应用程序,这些应用程序通常有很多统计用途,比如谷歌分析(示例)?他们的可靠数据或应用程序是否已经在诸如 couchbase 等数据库上运行?

Aar*_*own 8

这个问题真的太模糊了,无法有效回答。有数十种“NoSQL”数据存储,它们具有各种用例。这是 10,000 英尺高处的景色。

在我看来,常用的 NoSQL 数据存储基本上有 3 大类,键/值存储、文档数据库和大数据(hadoop)。这是一个有点人为的名称,其中许多产品可以说是跨越多个领域。还有一些其他类别,例如图形数据库,它们更专门针对特定问题,我不打算在这里讨论它们,因为我没有这方面的专业知识。

大多数 NoSQL 数据库都是简单的键/值存储,在检索命名键时速度非常快。如果您需要扫描或聚合数据集,它们的效率特别低。k/v 存储的示例是memcachedRiakRedisCouchBaseVoldemortAmazon DynamoDB。使用HandlerSocket插件(内置于Percona Server),甚至 MySQL 也可以用作非常快的 k/v 存储。这些 k/v 存储中的每一个都有不同的功能集,旨在解决不同的问题。它们中很少有适合作为应用程序的权威/主要数据存储,因为执行集合操作是多么困难和低效。这些主要用作缓存层或存储不需要关系操作的非常专业的数据。

另一类 NoSQL 数据库是文档存储。示例包括MongoDBCassandra。这些类型的数据存储比 k/v 存储存储更多结构化数据,并且通常具有更强大的查询语言。它们具有灵活的“模式”,可以从一行到另一行保留完全不同的数据集。

最后,您将了解真正的“大数据”存储,其中Hadoop及其相关查询语言、pighiveHadoop的 SQL 接口)和hbase(基于 hadoop/HDFS 的实时数据存储)是王道. 除了 hbase,基于 Hadoop 的数据存储往往是为离线处理数百台机器上真正庞大的数据集而构建的。

作为旁注,让我对“NoSQL”非常不满的是它实际上与 SQL 语言无关。NoSQL 是关于重新发明数据存储层,使其更“可扩展”(另一个模糊的、被误解的术语)和高度可用。查询语言在大多数情况下是无关紧要的,其中一些数据存储产生了执行甚至最简单操作的可怕的丑陋方式。如果开发人员做出这样的选择,SQL 可以用作大多数这些数据存储的访问语言 - 看看VoltDBMySQL Cluster或 Hive,了解具有“NoSQL”功能的分布式 SQL 数据库的示例。当被视为键/值存储时,SELECT value FROM table WHERE key = ?) 并且创建一个客户端库来创建一致的散列方案来构建分布式 MySQL 集群会相对容易,就像使用 Riak、Redis 或 memcached 一样。

最重要的是,如果您想要更多细节,则必须更明确地说明您的需求。以下只是您需要回答的一小部分问题,以限制该领域:

  • 您的访问模式是实时 (OLTP) 还是以批处理操作 (OLAP) 执行?
  • 您是否需要对数据执行聚合或基于集合的计算,还是只是按名称访问键?
  • 你有多少数据,它的结构如何?
  • 您确定传统的 SQL 数据库不能满足您的需求吗?
  • 您的CAP优先事项是什么?
  • 您需要ACID功能吗?
  • 您需要对数据进行哪些操作?

我希望这对你的研究有所帮助。