我一直在使用关系数据库,但最近才发现必须有其他类型的数据库非 -relational。
非关系型数据库的一些示例,以及它们在现实世界中的使用位置和方式?为什么要选择在关系数据库上使用非关系数据库?
编辑:答案中提到了另外两个类似的问题:
答案 0 :(得分:14)
这里提到的数据库类型的一个不可思议但有趣的替代方案是来自LazySoft Technology的关联数据库,例如句子。有一个免费的个人版本,您可以下载并自己尝试。企业版也是免费的,但需要向公司提出请求。
基本上,关联数据库允许您以与我们大脑相同的方式存储信息:作为这些事物之间的事物和关联。名称“Sentences”来自于此信息可以用 subject-verb-object 语法表示的方式:
句子可能是另一句话的主语或宾语:
因此,所有内容都可以归结为实体和关联。
当然,句子比这里可以表达的要多得多。我建议您花一些时间在LazySoft的white paper中阅读更多相关内容。
"The Associative Model of Data"是由Senmons的创作者之一Simon Williams以PDF格式提供的一本书。
答案 1 :(得分:13)
我们一直关注的非关系文档数据库是Apache CouchDB。
Apache CouchDB是一个分布式,容错且无架构的面向文档的数据库,可通过RESTful HTTP / JSON API访问。除其他功能外,它还提供具有双向冲突检测和解析功能的强大增量复制,并且可使用面向表的视图引擎进行查询和索引,并使用JavaScript作为默认视图定义语言。
我们的兴趣在于提供一个分布式访问用户首选项存储,它不受形状更改的影响,我们可以从Java序列化首选项对象,并使用基于XULRunner的客户端应用程序中的Javascript轻松访问它们。
答案 2 :(得分:11)
答案 3 :(得分:9)
声称是“Berkley样式数据库”或“键/值”数据库的任何数据库都不是关系数据库。
这些数据库通常基于复杂的散列算法,并提供基于密钥的非常快速的查找O(1),但为最终用户留下任何形式的关系良好。
例如,在关系数据库中,您将规范化您的结构并将多个表连接在一起以创建单个结果集。
在键/值数据库中,您将尽可能地进行非规范化,然后使用唯一键来查找数据。
如果您需要从两个来源提取数据,则必须手动将结果集合加入。
答案 4 :(得分:8)
所有数据库最初都是非关系型的,只是随着DB2和Oracle在1980年代中期的到来,它们才变得普遍。在那之前,大多数数据库都是平面文件或分层文件。
平面文件本质上很无聊,但是分层数据库要少得多,特别是因为DB2实际上是在第一个实例的层次化实现(即VSAM)之上实现的。我相信VSAM仍然在大型机系统上,并且具有相当重要的意义。
DB / 1(如此模糊,现在我甚至找不到维基百科链接)是IBM的前任黄金时段数据库(因此得名)。这是分层的 - 基本上你有一个由任意数字或“根”记录组成的文件,通常可以通过密钥直接访问。然后,每个根记录可以包含任意数量的子记录,每个记录都可以拥有自己的子记录。净效应是索引文件或根记录,每个根是潜在的树状结构的顶部。访问子记录可能很棘手 - 直接访问存在局限性,因此通常最终遍历树寻找所需的记录。 “数据库”中可以包含任意数量的这些文件,通常与密钥相关。这有很大的缺点 - 尤其是实际做任何需要编写完整程序的东西 - 基本上相当于我们现在可以在几分钟内完成SQL的工作。然而,它确实在执行速度方面得分,当时大型机具有iPhone的处理能力(虽然针对数据I / O进行了优化),而糟糕的DB2查询可能会导致耗资数百万美元的安装死机。对于DB / 1而言,这绝不是一个问题,而且在程序员比CPU时间更便宜的世界里,它是有意义的。
答案 5 :(得分:7)
App Engine数据存储区不是关系数据库。虽然数据存储区接口具有许多与传统数据库相同的功能,但数据存储区的独特特征意味着采用不同的方式设计和管理数据,以利用自动扩展的能力。
答案 6 :(得分:5)
尚未出现的其他两类数据库:
内容存储库是为内容(即文件,文档,图像等)设计的数据库。它们通常具有附加构造,例如分层浏览内容,搜索,不同格式之间的转换,版本控制以及许多其他内容。示例 - Alfresco,Documentum,JackRabbit,Day,OpenText,许多其他ECM供应商。
目录,即Active Directory或LDAP目录。这些数据库是为低写/高读取场景而设计的,并且在高地理距离/高延迟连接中高度分布。虽然主要用于身份验证/授权,但如果您的用例符合要求,则不必如此。
答案 7 :(得分:5)
OSIsoft的PI历史数据库是非关系型的。它仅用于存档带时间戳的数据。它被业界广泛使用,特别是作为所有这些“仪表板”的后端数据库。
没有必要是关系,因为没有连接。
答案 8 :(得分:4)
非关系型数据库不符合Codd的要求。 IntersystemsCaché完全重新编写/重新设计旧的Pick操作系统数据库。从我对Caché的一点点看来,它似乎是一个很好的重新设计。 它允许.net程序像访问SQL一样访问数据库。 Caché的运行是Pick OS程序,无需任何更改。通过将您的选择文件导入Caché,您仍然可以使用它运行旧的绿屏应用程序,还可以使用.net编写新程序,这样您就可以迁移到Windows应用程序,而无需放弃您已经投入的多年数据设计。 以下是Pick DB模型的一些背景知识。 Pick数据库使用完全可变长度的记录和字段。所有表都由一个唯一键键控,无需读取索引即可访问。 Pick设计系统使用Hashing算法,通常在第一次物理读取时从磁盘读取项目(假设系统维护正确执行)。 Pick中的字段是非类型的。所有数据都存储为字符串,而Casting由程序员决定。空值存储为空字符串,因此null不会像在SQL中那样占用磁盘空间。不需要外键。在“关系世界”中,DBA必须创建Order Header表和Order Line Item表。在“挑选模型”中有一个表格。一个例子是,“订单日期”是一个存储自1967年12月13日以来的#天数的字段(数据选择操作系统首次打开)。挑选程序员没有Y2k问题。第二列是客户编号。最大的区别在于,当您到达产品编号栏时,它将是“多值”(Codd不合格)。换句话说,数据库可以处理该列中的1-32000个产品#s。其他列(例如,订购数量)将与产品编号处于控制/依赖关系中,并且也将是多值的。当您到达发货数量时,拣货将转到第三维并具有子多值字段。您将拥有一个货件编号列,它将按行项目和子多值进行多值处理,其中包含该货件编号的该行的装运数量。没有内部联接需要。该订单的所有数据都存储在一个表中和单个记录中。没有孤儿行! 其次,数据定义有点不同。我们的词典可以包含不在此表中或正在操作的数据的定义。客户名称有几个例子。它将被定义为“使用客户编号”列并从“客户表”返回“名称”字段。另一个例子是行项目扩展将被定义为Quantity * Price / PricePer的计算。 我相信我读过某个地方Caché声称有超过100,000个装置。
答案 9 :(得分:4)
维度数据库是非关系型数据库的绝佳示例。它们非常常用于KPI和其他类型的聚合或统计数据的“业务仪表板”/“商业智能”。它们通常来自关系数据库,在某些情况下可以提供更好的性能。
答案 10 :(得分:4)
请注意,关系数据库的概念极具争议性。诸如C. J. Date之类的纯粹主义者会争辩说,许多常用的数据库(例如Oracle和SQL Server)不能完全符合被称为“关系”的关系模型。
答案 11 :(得分:3)
面向对象的数据库是一种有趣的非关系型数据库。
交易部门有时使用OO数据库,因为每个交易/合约看起来有点像该类别中的其他交易/合约,但也具有独特的属性。非常难以在关系上表示它。
答案 12 :(得分:3)
我认为Excel中的平面文件数据库是非关系型的,并且被很多人使用。
它实际上只是一个无法与其他表连接的数据库表。
答案 13 :(得分:3)
答案 14 :(得分:2)
对于基于图形的dbms,你有neo4j
对于分层dbms,您可以使用任何标准文件系统或“schema”支持任何LDAP实现。
答案 15 :(得分:2)
答案很多,但最终都属于两个主要类别之一:
导航。包括树/层次结构数据库和图形数据库。
打破第一个普通形式的数据库(多个值)。包括Pick数据库和Lotus Notes及其后代,如CouchDB。
编辑:当然,像BDB这样的键/值存储不是关系型的,但不言而喻,不是吗?我的意思是,它们只是键/值存储。
答案 16 :(得分:2)
包含数据但不表达该数据内关系的任何文件或文件组都是非关系型数据库。
答案 17 :(得分:2)
RRDtool旨在存储和聚合日志数据。您配置采样间隔并将数据输入其中,然后返回基于时间的结果。它针对固定大小的存储进行了优化,并在一段时间后开始聚合过去的结果。例如,假设您有一个5分钟时间间隔的循环数据库。即使您每秒发送一次温度数据,它仍然只以5分钟为增量存储结果。一周后,它将这些结果平均为小时值。一个月后,每小时结果平均为每日数字,依此类推。
答案 18 :(得分:1)
在我的公司www.smartsgroup.com,我们有一个专有的数据库引擎,我们称之为“事务日志数据库”。它建立在平面文件上,每个文件包含一系列“事件”或“消息”,二进制格式,加上该数据的各种索引和用于再现证券交易所订单簿状态的算法。它针对顺序更新和顺序访问进行了高度优化。
在科学应用中,使用专有数据库引擎而不是RDBMS也很常见。我还在一家拥有世界上最大的脑电图脑记录数据库的公司工作:www.brainresource.com。我们使用平面文件数据库,它对我们很有用。
SmartsGroup还使用时态数据库,它类似于非关系型数据库表,除了我们将所有更改的历史记录存储到所有字段,以便我们可以在特定日期重现特定行的状态。
答案 19 :(得分:1)
上面链接的Dimensional Databases的Wiki页面似乎已经消失。
一些OLAP系统由多维数据库(MOLAP)支持,这些数据库经常用于财务分析。它们提供了交互式客户端,允许用户在不同的聚合级别上浏览数据。
答案 20 :(得分:1)
作为OO数据库,我想到了IntersystemsCaché。一些医疗和图书馆系统就是以此为基础的。
答案 21 :(得分:1)
的dBase。虽然它是这样销售的,但它不符合要求。
答案 22 :(得分:1)
在我的大学有一个研究deductive databases的小组。