面向中小型应用程序的非关系数据库(NoSQL)

面向中小型应用程序的非关系数据库(NoSQL),nosql,amazon-simpledb,non-relational-database,Nosql,Amazon Simpledb,Non Relational Database,非关系数据库(如键值对存储)的好处在用于大规模数据集(google、facebook、linkedin)时显而易见。您认为中小型应用程序如何从使用非关系数据库中获益?自60年代以来,IBM大型机就有了“非关系”数据库(层次数据库,如IMS+变体)。这些数据库仍在使用中,因为它们速度极快,并且能够很好地处理大规模数据 关系数据库的要点是提供一种用于存储和检索数据的常规、相对抽象的方法,在这种方法中,调优可以相对独立于数据模型进行(对于IMS来说不是这样)。它们的设计是为了应对无法轻松重组层次结构数

非关系数据库(如键值对存储)的好处在用于大规模数据集(google、facebook、linkedin)时显而易见。您认为中小型应用程序如何从使用非关系数据库中获益?

自60年代以来,IBM大型机就有了“非关系”数据库(层次数据库,如IMS+变体)。这些数据库仍在使用中,因为它们速度极快,并且能够很好地处理大规模数据

关系数据库的要点是提供一种用于存储和检索数据的常规、相对抽象的方法,在这种方法中,调优可以相对独立于数据模型进行(对于IMS来说不是这样)。它们的设计是为了应对无法轻松重组层次结构数据库的问题。好的一面是良好的组织;缺点是中等,而不是高性能

Google提供可扩展存储和MapReduce来处理规模问题。这不是关系

在过去十年的早期,人们大力推动将数据存储在XML中,这种XML本质上是分层的,因为XML是隐式分层的。这是一个巨大的错误,因为它重复了Hierarchic数据库带来的不便,但没有任何性能。我并不觉得奇怪,这场运动似乎已经基本消亡了

在我看来,大多数非关系型的实际推动似乎都是针对性能和规模。我看不出这对“小型”应用程序有多大帮助

人们已经提出了很多基于知识的方案,但是没有做过很多实际的数据管理。我想到了道格·勒纳特。数据库的能力
帮助一个应用程序得出不明显的结论对那些试图“智能化”的“小型”应用程序来说是一件非常有趣的事情。但这些还不多

以这种规模使用NoSQL数据库的最佳时机是数据库模型(键值、文档等)与应用程序的需求非常匹配,并且不需要高级关系功能

在小范围内,性能不是问题,因为几乎所有东西都很快。存储引擎不是问题,如果您不需要复杂的查询引擎,那么缺少SQL支持也不是问题

您只需了解它的适用性和易用性。老实说,工具确实成了一个问题。关系数据库工具已经成熟,NoSQL工具的功能不那么丰富,也没有那么久经考验。通常情况下,这是您自己的工具。一定要考虑你放弃的工具和你需要多少工具。

与产品相比,考虑NoSQL服务(如Amazon SimpleDB和Microsoft Azure)时,小型项目还有一系列额外的优势。如果您只需为所使用的东西付费,而使用的东西不多,那么它可能比运行专用服务器更便宜,可以一直免费获得SimpleDB免费使用层之类的东西


您还可以避免一些服务器和数据库维护成本。如果您没有DBA,或者您的DBA已经过度工作,这将是一个巨大的胜利。当然,您仍然需要做管理工作,但这大大减少了,而且通常更简单。

当涉及到图形数据库(比如我参与的项目)时,它们非常擅长。这意味着,它们提供了(也请参见)。在我看来,这在中小型应用程序中非常重要

通过示例可以更好地解释这一点,因此这里有一些指向示例应用程序/域建模的链接:


这个问题可能需要更多的背景。。。假设Python环境,考虑YySalm项目的教程:


采用NoSQL不仅仅是为了可扩展性。序列化(任何任意Python对象)和持久性在任何尺度上都非常方便——因此,将键值系统视为一种方法。 RDBMS的一个问题是,您需要将编程语言域模型映射到RDBMS的关系模式。这项工作通常用于配置ORM层

使用NoSQL数据库,您不必将对象映射到关系模型,而且在大多数情况下,对象都是按原样序列化的。由于缺少中间模式

另一个好处是可伸缩性和性能。因为大多数时候你的数据都是通过“键”有效地接收的,所以所有的东西都在使用和索引。通过对键执行%(MOD)来减少可用NoSQL实例的数量,从而提供对切分至关重要的自然数据分区,可以实现简单的切分


如果您有兴趣了解NoSQL与RDBMS的不同之处,我将提供一个教程,向您展示如何进行开发。

如果您匹配一些常见的PaaS云服务,如键值存储、BLOB存储、,还有一个消息队列存储,您可以使用一些方便的工具,将小型应用程序开发人员从DBA和基础架构人员的暴政中解放出来

如今,小型开发人员经常求助于Jet MDB。为什么?简单的共享访问就像将MDB文件存储在整个应用程序社区可见的文件共享上一样简单。当他们能够成功(即从网关管理员那里获得必要的支持)时,他们可能会使用SQL Server Express、MySQL等

可悲的是,在一个大型组织中,这些把关人可能会非常敌对。提到一个“数据库”,你会突然面临DBA团队和相关的延迟、应用程序审查、优先级划分等。提到需要一个服务器,你就会面临另一个行刑队

如果您不需要RDBMS,那么使用NoSQL解决方案和相关的云服务可以消除大量这种情况

首先,真正需要的是一个公共云提供商的帐户。这是一件非常容易的事情,一旦概念被提出