当用于大规模数据集(google、facebook、linkedin)时,非关系型数据库(例如键值对存储)的好处是显而易见的。您认为中小型应用程序如何从使用非关系数据库中受益?
7 回答
自 60 年代以来,IBM 大型机就拥有“非关系”数据库(分层数据库,例如 IMS + 变体)。这些数据库仍在使用中,因为它们速度极快并且可以很好地处理大规模。
关系数据库的重点是提供一种常规的、相对抽象的方法来存储和检索数据,其中可以相对独立于数据模型进行调整(对于 IMS 并非如此)。它们的设计是为了应对无法轻松重组分层数据库的情况。好处是组织很好;缺点是中等,不是高性能。
Google 提供可扩展的存储和 MapReduce 来处理规模。这不是关系。
在过去十年的早期,有一个巨大的推动力是在 XML 中存储数据,因为 XML 是隐式分层的,所以本质上是分层的。恕我直言,这是一个巨大的错误,因为它重复了分层数据库的不便,但没有任何性能。我并不很惊讶这个运动似乎已经死了。
在我看来,大多数对非关系的实际推动似乎都是针对性能和规模的。我看不出这对“小型”应用程序有多大帮助。
人们已经提出,但没有做很多使用基于知识的方案的实际数据管理。Doug Lenat 的CYC在这里浮现在脑海中。数据库帮助应用程序得出非显而易见结论的能力让我对试图变得“智能”的“小型”应用程序非常感兴趣。但是这些还没有很多。
在这种规模下使用 NoSQL 数据库的最佳点是当数据库模型(键值、文档等)很好地匹配应用程序的需求并且不需要高级关系功能时。
在光谱的小端,性能不是问题,因为几乎所有东西都很快。存储引擎不是问题,如果您不需要复杂的查询引擎,缺少 SQL 支持也不是问题。
剩下的就是它的贴合度和易用性。不过老实说,工具确实成为一个问题。关系数据库工具已经成熟,NoSQL 工具的功能较少,战斗力较弱。很多时候,它是你自己的工具。一定要考虑你会放弃哪些工具以及你需要它们多少。
与产品相比,在考虑 NoSQL 服务(如 Amazon SimpleDB 和 Microsoft Azure)时,小型项目还有其他优势。如果你只需要为你使用的东西付费并且你不使用太多,它可能比运行一个专用服务器更便宜,一直到免费,比如 SimpleDB 免费使用层。
您还可以避免一些服务器和数据库维护成本。如果您没有 DBA,或者您的 DBA 已经过度工作,这可能是一个巨大的胜利。当然,您仍然需要进行管理工作,但工作量大大减少,而且通常更简单。
当涉及到图形数据库(例如Neo4j - 我参与的一个项目)时,它们擅长扩展到复杂性。这意味着,它们为建模业务领域提供了“更好的基础”(参见The State of NoSQL,也由Ben Scofield 撰写)。在我看来,这在中小型应用程序中非常重要。
这可以通过示例更好地解释,所以这里有一些示例应用程序/域建模的链接:
The question perhaps requires a bit more context... assuming a Python environment, consider the tutorial at the y_serial project: http://yserial.sourceforge.net/
NoSQL is not merely adopted for reasons of scalability. Serialization (of any arbitrary Python object) and persistence are very convenient at any scale -- so consider the key-value system as one approach.
如果您匹配一些常见的 PaaS 云服务,例如键值存储、BLOB 存储和消息队列存储,您将拥有一些方便的工具,可以将小型应用程序开发人员从 DBA 和基础设施人员的专制中解放出来。
今天,小型开发商经常求助于 Jet MDB。为什么?简单的共享访问就像将 MDB 文件存储在对整个应用程序社区可见的文件共享中一样简单。当他们可以摆脱它(即从看门人那里获得必要的支持)时,他们可能会使用 SQL Server Express、MySQL 等。
可悲的是,在大型组织中,这些看门人可能非常敌对。提到“数据库”,你突然面临 DBA 帮派和相关的延迟、应用程序审查、优先级排序等。提到需要服务器,你就会面对另一个行刑队。
如果您不需要 RDBMS,则使用 NoSQL 解决方案和相关云服务可以消除大量此类问题。
一方面,真正需要的只是一个公共云提供商的帐户。一旦概念获得批准,这将变得相当容易。一旦您获得批准并分配了一个帐户,作为开发人员的您会更容易,尽管当然存在通常的簿记问题。
但是,让我们把它放在一边。如果您的组织为此类用途实施了私有云会怎样?许多外部计费问题消失了,数据不安全问题消失了,等等。
这样的事情可以以半匿名的方式实施和配置,几乎与管理文件共享一样容易。之所以会出现匿名性,是因为一旦您被批准在内部云上进行开发,没有人需要在使用它之前挑剔您的活动细节,就像他们需要在您可以在现有文件共享上创建文件之前检查请求一样.
显然需要管理存储和 CPU 配额。没有人能够承受无限地扩大规模。恶意应用程序可能会消耗大量资源。因此,您需要某种配额系统来限制使用量。这是否由基础设施人员监控是一个实现决定,或者它可能被视为文件共享使用:用完并且有人对程序员大喊大叫,程序员反过来会调查它并在适当的情况下要求更多(或修复他的错误)。
但是您最终会得到“实用计算”,并且通过“不使用 SQL”,您不会承担与 DBA 打交道的成本(和问题)。当你完成一些工作时,他们仍然可以在他们的大办公室里安静地上网冲浪。
Amazon SimpleDB 对于需要非关系型数据库来存储较小的非结构化数据的人非常有用。Amazon SimpleDB 将每个域的存储大小限制为 10GB。Amazon SimpleDB 提供简单性和灵活性。SimpleDB 自动索引所有数据。Amazon SimpleDB 定价基于您的实际盒子使用情况。您可以在 Amazon SimpleDB 中存储任何 UTF-8 字符串数据。
RDBMS 的问题之一是您需要花费精力将您的编程语言领域模型映射到您的 RDBMS 的关系模式。这项工作通常用于配置您的 ORM 层。
使用 NoSQL 数据库,您不必将对象映射到关系模型,并且在大多数情况下,您的对象按原样序列化。由于缺少中间模式,数据迁移和版本控制变得更加容易。
另一个好处是可扩展性和性能。由于大多数情况下,您的数据都是由“键”有效接收的,因此所有内容都使用和索引。通过针对可用 NoSQL 实例的数量对键执行 % (MOD) 来实现简单的分片,从而提供对分片至关重要的自然数据分区。
如果您有兴趣了解使用 NoSQL 进行开发与使用 RDBMS 进行开发有何不同,我有一个教程,其中将展示如何使用 Redis 设计一个简单的博客应用程序。