我一直在查看 NoSQL 的维基百科页面,它列出了键/值存储数据库的几个变体,但我找不到关于键/值存储在这种情况下的含义的任何详细信息。有人可以向我解释或链接解释吗?另外,我什么时候会使用这样的数据库?
jco*_*and 42
您熟悉键/值对的概念吗?假设您熟悉 Java 或 C#,这是在语言中作为 map/hash/datatable/KeyValuePair (最后是在 C# 的情况下)
这个小示例图表展示了它的工作方式:
Color Red
Age 18
Size Large
Name Smith
Title The Brown Dog
Run Code Online (Sandbox Code Playgroud)
如果你有一个键(左)和一个值(右)......注意它可以是字符串、整数或类似的。大多数 KVP 对象允许您在右侧存储任何对象,因为它只是一个值。
由于您始终拥有要返回的特定对象的唯一键,因此您只需在数据库中查询该唯一键并从具有该对象的任何节点获取结果(这就是为什么它对分布式系统有益,因为还涉及其他事情,例如轮询前 n 个节点以返回与其他节点返回匹配的值)。
现在我上面的例子很简单,所以这里有一个稍微好一点的 KVP 版本
user1923_color Red
user1923_age 18
user3371_color Blue
user4344_color Brackish
user1923_height 6' 0"
user3371_age 34
Run Code Online (Sandbox Code Playgroud)
如您所见,简单的密钥生成是将“用户”放入用户唯一编号、下划线和对象。同样,这是一个简单的变体,但我认为我们开始明白,只要我们可以定义左侧的部分并使其格式一致,我们就可以提取该值。
请注意,键值(好吧,可能有一些限制,例如纯文本)或值属性(可能有大小限制)没有限制,但到目前为止我还没有真正复杂的系统。让我们尝试更进一步:
app_setting_width 450
user1923_color Red
user1923_age 18
user3371_color Blue
user4344_color Brackish
user1923_height 6' 0"
user3371_age 34
error_msg_457 There is no file %1 here
error_message_1 There is no user with %1 name
1923_name Jim
user1923_name Jim Smith
user1923_lname Smith
Application_Installed true
log_errors 1
install_path C:\Windows\System32\Restricted
ServerName localhost
test test
test1 test
test123 Brackish
devonly
wonderwoman
value key
Run Code Online (Sandbox Code Playgroud)
你明白了......所有这些都将存储在分布式节点上的一个巨大的“表”中(这一切背后都有数学),你只需通过名称向分布式系统询问你需要的值。
至少,这是我对这一切如何运作的理解。我可能有一些错误,但这是基础知识。
强制性维基百科链接http://en.wikipedia.org/wiki/Associative_array
小智 26
在 SQL 术语中,NoSQL 数据库是具有两列的单个表:一列是(主)键,另一列是值。就是这样,这就是 NoSQL 的全部魔力。
您会出于一个主要原因使用 NoSQL:可扩展性。
如果您的应用程序需要每秒处理数百万次查询,那么实现它的唯一方法就是添加更多服务器。这对 NoSQL 来说非常便宜和容易。相比之下,扩展传统 SQL 数据库要复杂得多。
只有最大的网站才能真正利用 NoSQL 的全部潜力,例如,Facebook 拥有数千台运行Cassandra的服务器。
我强烈建议阅读这篇博文,比较 SQL、NoSQL 和 ORM:
http://seldo.com/weblog/2010/07/12/in_defence_of_sql
Cod*_*awk 14
我假设您对 NoSQL 移动和非关系数据库模型有基本的了解。
键值存储是非关系数据库模型之一,如图形、面向文档的数据库模型。
键值存储和 NoSQL 运动
一般来说,SQL 设法处理特殊结构化的数据,并允许根据相关部门的需要进行高度动态的查询。
虽然在这个特定领域仍然没有 SQL 的真正竞争对手,但日常 Web 应用程序中的用例是不同的。您不会发现一个高度动态的查询范围,其中充满了对大型表的外部和内部联接、联合和复杂计算。你通常会发现一种非常面向对象的思维方式。特别是采用MVC等模式后,后端的数据通常不是为数据库建模,而是为逻辑完整性建模,这也有助于人们理解庞大的软件基础设施。将这些面向对象模型放入关系数据库所做的是大量规范化,这导致表的复杂层次结构,并完全违背了面向对象编程背后的主要思想。
SQL 允许对复杂数据集进行任意动态查询的事实由于仅将 SQL 数据库用于面向对象数据的持久存储而变得毫无用处,这基本上是当今大多数应用程序所做的。
这就是键值存储发挥作用的地方。
Key value stores allow the application developer to store schema-less data. This data is usually consisting of a string which represents the key and the actual data which is considered to be the value in the "key - value" relationship. 数据本身通常是某种编程语言的原语(字符串、整数、数组)或由编程语言绑定到键值存储的对象。这取代了对固定数据模型的需求,并降低了对正确格式化数据的要求。
They all allow storage of arbitrary data which is being indexed using a single key to allow retrieval. “更简单”商店的最大区别在于您可以(或不能)验证或访问不同商店(如果可能)的方式。虽然存储和检索数据的速度优势可能是考虑它优于普通 SQL 数据库的一个原因,但使用键值存储时出现的另一大优势是,与嵌入式 SQL 字符串相比,生成的代码往往看起来干净简单。你的编程语言。这是人们倾向于使用 Hibernate 或 Active Record 等对象关系映射框架来解决的问题。通过在 SQL 数据库和面向对象的编程语言之间添加大量非常复杂的代码,拥有对象关系映射器基本上似乎模拟了键值存储。整个社区在“ NoSQL ”标签下聚集在一起,讨论使用关系数据库管理系统替代方案的这些优点和缺点。阅读更多
这是一篇有点老的文章,但我发现它非常有用。
when would I use such a database? Could someone explain or link an explanation to me?
它更多的是架构决策,也是一个有争议的决策......你必须考虑很多因素,比如可扩展性、性能等......
查看下面的幻灯片/文章,您将了解何时、为什么以及为什么不使用键值存储:)
Jer*_*hka 12
其他人已经解释了这一点,但无论如何我还是要刺一下。
键/值数据库通过主键存储数据。这让我们可以唯一标识存储桶中的记录。由于所有值都是唯一的,查找速度非常快:它始终是一个简单的磁盘查找。
值只是任何类型的值。数据的存储方式对数据库本身是不透明的。当您将数据存储在键/值存储中时,数据库不知道也不关心它是 XML、JSON、文本还是图像。实际上,我们在键/值存储中所做的是将理解数据如何从数据库存储到检索数据的应用程序的责任。由于每个存储桶只有一个范围的键需要担心,因此很容易将键分布在多个服务器上并使用分布式编程技术来快速访问这些数据(每个服务器存储一系列数据) .
这种数据方法的一个缺点是搜索是一项非常困难的任务。您需要读取数据桶中的每条记录,否则您需要自己构建二级索引。
您可能想要使用键/值数据库的原因有几个:
使用键/值数据库的理由与使用 RDBMS 的理由一样多,并且有同样多的理由来证明一个比另一个合理。查看您如何查询数据并了解该数据访问模式如何指导您将如何插入和存储数据非常重要。
请记住,键/值数据库只是 NoSQL 数据库的一种。
如果你有一个关系数据库,那么你可以很容易地试验这个:
create table keyvalue (my_key varchar2(255), my_value varchar2(255));
create unique index ix_keyvalue on keyvalue (my_key, my_value);
Run Code Online (Sandbox Code Playgroud)
这就是所有数据库过去的样子,从 1979 年开始,Berkeley DBM就是一个很好的例子。从那时起,事情有了进展(在任何 RDBMS 中,每个键都可以有多个值)。对于许多应用程序,键值存储就足够了(例如,这就是 sendmail 存储其别名的方式)。但是,如果您发现自己在自己的代码中预处理了值(或连接字符串以制作“键”),也许在分隔符上拆分值或解析它,然后才能使用它,那么您可能会更好一个 RDBMS 并以这种方式实际存储它。
| 归档时间: |
|
| 查看次数: |
104094 次 |
| 最近记录: |