我一直在使用关系数据库,但最近才发现必须有其他类型的非关系型数据库.
什么是非关系数据库的例子,以及它们在现实世界中的使用位置和方式?为什么要选择在关系数据库上使用非关系数据库?
编辑:答案中提到了另外两个类似的问题:
不是关系的数据库系统.
不使用关系数据库的好理由?
Jeff Jones.. 14
这里提到的数据库类型的一个公认的模糊但有趣的替代方案是来自LazySoft Technology的关联数据库,例如Sentences .有一个免费的个人版本,您可以下载并自己尝试.企业版也是免费的,但需要向公司提出请求.
从本质上讲,关联数据库允许您以与我们大脑相同的方式存储信息:作为这些事物之间的事物和关联.名称"Sentences"来自于此信息可以用subject-verb-object语法表示的方式:
汤姆是劳拉的兄弟
旧金山位于加利福尼亚州
迈克的信用额度为10,000美元
句子可能是另一句话的主语或宾语:
(公交车570 到达上午8:15)上周日
玛丽说(馅饼是由威廉烤制的)
所以,一切都可以归结为实体和协会.
当然,句子比这里表达的要多得多.我建议您花一些时间在LazySoft 的白皮书中阅读更多相关信息.
"数据联想模型"是由Sentences的创造者之一Simon Williams以PDF格式提供的一本书.
这里提到的数据库类型的一个公认的模糊但有趣的替代方案是来自LazySoft Technology的关联数据库,例如Sentences .有一个免费的个人版本,您可以下载并自己尝试.企业版也是免费的,但需要向公司提出请求.
从本质上讲,关联数据库允许您以与我们大脑相同的方式存储信息:作为这些事物之间的事物和关联.名称"Sentences"来自于此信息可以用subject-verb-object语法表示的方式:
汤姆是劳拉的兄弟
旧金山位于加利福尼亚州
迈克的信用额度为10,000美元
句子可能是另一句话的主语或宾语:
(公交车570 到达上午8:15)上周日
玛丽说(馅饼是由威廉烤制的)
所以,一切都可以归结为实体和协会.
当然,句子比这里表达的要多得多.我建议您花一些时间在LazySoft 的白皮书中阅读更多相关信息.
"数据联想模型"是由Sentences的创造者之一Simon Williams以PDF格式提供的一本书.
平面文件
CSV或其他分隔数据
电子表格
/ etc/passwd文件
mbox邮件文件
分级
Windows注册表
Subversion使用文件系统FSFS代替Berkley DB
我们一直关注的非关系文档数据库是Apache CouchDB.
Apache CouchDB是一个分布式,容错且无架构的面向文档的数据库,可通过RESTful HTTP/JSON API访问.除了其他功能之外,它还提供了具有双向冲突检测和解析功能的强大的增量复制,并且可以使用面向表的视图引擎进行查询和索引,其中JavaScript充当默认视图定义语言.
我们感兴趣的是提供一个分布式访问用户首选项存储,它可以免受形状变化的影响,我们可以从Java序列化首选项对象,并使用基于XULRunner的客户端应用程序中的Javascript轻松访问这些变体.
声称是"Berkley样式数据库"或"键/值"数据库的任何数据库都不是关系数据库.
这些数据库通常基于复杂的散列算法,并且基于密钥提供非常快速的查找O(1),但是为最终用户留下任何形式的关系良好.
例如,在关系数据库中,您将规范化结构并将多个表连接在一起以创建单个结果集.
在键/值数据库中,您将尽可能地进行非规范化,然后使用唯一键来查找数据.
如果需要从两个源中提取数据,则必须手动将结果集合在一起.
所有数据库最初都是非关系型的,只是随着DB2和Oracle在1980年代中期的到来,它们才变得普遍.在那之前,大多数数据库都是平面文件或分层.
平面文件本身就很无聊,但是分层数据库要少得多,特别是因为DB2实际上是在第一个实例的层次化实现(即VSAM)之上实现的.我相信VSAM仍然在大型机系统上,并且具有相当重要的意义.
DB/1(如此模糊,现在我甚至找不到维基百科链接)是IBM的前任黄金时段数据库(因此得名).这是分层的 - 基本上你有一个由任意数字或"根"记录组成的文件,通常可以通过密钥直接访问.然后,每个根记录可以包含任意数量的子记录,每个记录都可以拥有自己的子记录.净效应是索引文件或根记录,每个根是潜在的树状结构的顶部.访问子记录可能很棘手 - 直接访问存在局限性,因此通常最终遍历树寻找所需的记录."数据库"中可以包含任意数量的这些文件,通常与密钥相关.
这有很大的缺点 - 尤其是实际做任何需要编写完整程序的东西 - 基本上相当于我们现在可以在几分钟内完成SQL的工作.然而,它确实在执行速度方面得分,当时大型机具有iPhone的处理能力(虽然针对数据I/O进行了优化),而糟糕的DB2查询可能会导致耗资数百万美元的安装死机.对于DB/1而言,这绝不是一个问题,而且在程序员比CPU时间更便宜的世界里,它是有意义的.
Google App Engine数据存储区:
App Engine数据存储区不是关系数据库.虽然数据存储区接口具有许多与传统数据库相同的功能,但数据存储区的独特特征意味着采用不同的方式设计和管理数据,以利用自动扩展的能力.
OSIsoft的PI历史数据库是非关系型的.它仅用于存档带时间戳的数据.它被业界广泛使用,特别是作为所有这些"仪表板"的后端数据库.
因为没有连接,所以不需要关系.
其他两种尚未出现的数据库:
内容存储库是为内容(即文件,文档,图像等)设计的数据库.它们通常具有附加构造,例如分层浏览内容,搜索,不同格式之间的转换,版本控制以及许多其他内容.示例 - Alfresco,Documentum,JackRabbit,Day,OpenText,许多其他ECM供应商.
目录,即Active Directory或LDAP目录.这些数据库是为低写/高读取场景而设计的,并且在高地理距离/高延迟连接中高度分布.虽然主要用于身份验证/授权,但如果您的用例符合要求,则不必如此.