在大规模数据集(google,facebook,linkedin)中使用非关系型数据库(例如键值对存储)的好处是显而易见的。您如何看待中小型应用程序可以从使用非关系数据库中受益?
答案 0 :(得分:6)
关系数据库的关键是提供一种常规的,相对抽象的方法来存储和检索数据,其中调整可以相对独立于数据模型完成(对IMS来说不是这样)。它们的设计反而无法轻易地重新组织层次数据库。好处是良好的组织;缺点是中等,而不是高绩效。
Google提供可扩展存储和MapReduce来处理规模。它不是关系型的。
在过去十年中,以XML格式存储数据的过程受到了极大的推动,基本上是以数字形式存在,因为XML是隐式分层的。这是一个巨大的错误恕我直言,因为它重复了heirarchical数据库的不便,但没有任何表现。我不是很惊讶这个运动似乎已经死了。
在我看来,对于非关系的大多数实际推动都是针对性能和规模的。我不知道这对“小”应用程序有多大帮助。
人们已经提出,但没有使用基于知识的方案进行大量实际数据管理。想到Doug Lenat的CYC {{3}}。数据库的能力 帮助一个应用程序得出非明显的结论让我觉得非常有趣的“小”应用程序试图“聪明”。但目前还没有很多。
答案 1 :(得分:2)
在该规模上使用NoSQL数据库的最佳位置是数据库模型(键值,文档等)与应用程序需求的良好匹配,并且不需要高级关系功能。
在频谱的最后阶段,性能不是问题,因为几乎所有事情都很快。存储引擎是一个非问题,如果您不需要复杂的查询引擎,缺乏SQL支持是一个非问题。
您可以轻松掌握它的适用性和使用方式。老实说,工具确实成了一个问题。关系数据库工具已经成熟,NoSQL工具功能较少,战斗力较弱。它常常是自己动手制作的工具。绝对要考虑你放弃了什么工具以及你需要多少工具。
与产品相比,在考虑NoSQL服务(如Amazon SimpleDB和Microsoft Azure)时,小型项目还有一些优势。如果你只需要为你使用的东西付费并且你没有使用太多,它可能比运行专用服务器便宜,一直到免费使用像SimpleDB免费使用层这样的东西。
您还可以避免一些服务器和数据库维护成本。如果您没有DBA,或者您的DBA已经过度工作,这可能是一个巨大的胜利。当然,你仍然需要管理工作,但它会大大减少,而且通常更简单。
答案 2 :(得分:1)
对于图形数据库(如Neo4j - 我参与的一个项目),他们在scaling to complexity取得了优异成绩。这意味着,他们提供了"better substrates for modeling business domains"(另请参阅The State of NoSQL,Ben Scofield)。我认为,这在中小型应用中非常重要。
通过示例可以更好地解释这一点,所以这里有一些示例应用程序/域建模的链接:
答案 3 :(得分:0)
这个问题可能需要更多的上下文......假设有一个Python环境,请考虑y_serial项目中的教程:http://yserial.sourceforge.net/
NoSQL不仅仅是出于可伸缩性的原因而被采用。序列化(任意Python对象)和持久性在任何规模上都非常方便 - 因此将键值系统视为一种方法。
答案 4 :(得分:0)
RDBMS的一个问题是,您需要花费精力将编程语言域模型映射到RDBMS的关系模式。这项工作通常用于配置您的ORM层。
使用NoSQL数据库,您不必将对象映射到关系模型,并且在大多数情况下,您的对象按原样序列化。由于缺少中间架构,data migrations and versioning become easier。
另一个好处是可扩展性和性能。由于大多数时候您的数据都被“密钥”接收,因此所有内容都使用和索引。通过对密钥执行%(MOD)可以实现简单的分片,这可以提供自然数据分区,这对分片至关重要。
如果您有兴趣了解NoSQL的开发与RDBMS的不同之处,我有一个教程,我将展示如何进行designing a simple blog application using Redis。
答案 5 :(得分:0)
如果您匹配一些常见的PaaS云服务,如键值存储,BLOB存储和Message Queue存储,您可以使用一些方便的工具,让小型应用程序开发人员免受DBA和基础架构人员的暴政困扰
今天,小型开发人员经常使用Jet MDB。为什么?简单的共享访问就像将MDB文件存储在整个应用程序社区可见的文件共享上一样简单。当他们可以逃脱它(即获得网守的必要支持)时,他们可能会使用SQL Server Express,MySQL等。
可悲的是,那些看门人在一个大型组织中处理起来可能会非常敌对。提到一个“数据库”,然后突然你面对DBA团伙和相关的延迟,应用程序评论,优先级等。提及需要服务器,你面对其他的行刑队。
如果您不需要RDBMS,使用NoSQL解决方案和相关的云服务可以消除大量此类问题。
首先,所有真正需要的是拥有公共云提供商的帐户。一旦这个概念获得批准,这就变得相当容易。一旦您获得批准并分配了帐户,您作为开发人员就会更容易,但当然会有通常的簿记问题。
但是我们甚至将它放在一边。如果您的组织为此类用途实施了私有云,该怎么办?许多外部计费问题消失,数据不安全问题消失等等。
这样的事情可以半匿名的方式实现和配置,几乎和管理文件共享一样容易。匿名是因为一旦你被批准在内部云上开发,没有人需要在使用它之前挑选你的活动细节,而不是在你可以在现有文件共享上创建文件之前检查请求
显然会有存储和CPU配额来管理。没人能负担得起无限扩大规模。流氓应用程序可能会消耗大量资源。所以你需要的是某种配额系统来限制使用。这是否由基础设施人员监控是一个实现决策,或者它可能被视为文件共享使用:用完了,有人对程序员大吼大叫,程序员反过来调查它并在适当时请求更多(或修复他的错误)。 / p>
但是你最终得到了“效用计算”和“不使用SQL”,你不会产生与DBA打交道的成本(和问题)。当你完成一些工作时,他们仍然可以静静地在大办公室里上网。
答案 6 :(得分:0)
Amazon SimpleDB对于那些需要非关系数据库来存储较小的非结构化数据的人来说非常有用。 Amazon SimpleDB将每个域的存储大小限制为10GB。 Amazon SimpleDB提供简单性和灵活性。 SimpleDB自动索引所有数据。 Amazon SimpleDB定价基于您实际的盒子使用情况。您可以在Amazon SimpleDB中存储任何UTF-8字符串数据。