针对这种特殊需求的最佳数据库和数据库设计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了针对这种特殊需求的最佳数据库和数据库设计相关的知识,希望对你有一定的参考价值。
我希望在数据库中存储大约5000万到1亿个文档,并且能够以非常快的速度进行查询。文档看起来像这样:
{
name: 'example',
value: '300,201,512'
}
value
列始终是唯一的,name
不是。现在我希望能够仅使用查询检查是否存在具有特定值的文档。什么数据库是最好的选择,哪种设计最适合这样的查询的最快速度?
NoSQL数据库试图提供更传统的关系数据库管理系统所没有的某些功能。无论是为了缓存目的而持有较短时间长度的简单键值对,还是保留使用关系数据库和结构化查询语言(SQL)无法轻易处理的非结构化集合(例如集合) - 它们都是在这里帮忙。
为了更好地理解每个数据库管理系统的角色和底层技术,让我们快速浏览这四个操作模型。
基于键/值
我们将使用基于键/值的数据库管理开始我们的NoSQL建模之旅,因为它们可以被认为是NoSQL的最基本和主干实现。
这些类型的数据库通过将键与值匹配来工作,类似于字典。没有结构也没有关系。在连接到数据库服务器(例如Redis)之后,应用程序可以陈述密钥(例如,the_answer_to_life)并提供匹配值(例如42),该匹配值稍后可以通过提供密钥以相同的方式检索。
键/值DBMS通常用于快速存储基本信息,有时在执行CPU和内存密集型计算之后不是那么基本的信息。它们性能极高,效率高,通常易于扩展。
注意:当涉及到计算机时,字典通常指的是一种特殊的数据对象。它们由具有匹配值的单个键的集合数组构成。
基于列
基于列的NoSQL数据库管理系统通过提高基于键/值的简单性质来工作。
尽管它们在因特网上具有复杂易懂的图像,但这些数据库通过创建与记录匹配的一个或多个键/值对的集合非常简单地工作。
与传统的关系数据库定义模式不同,基于列的NoSQL解决方案不需要预先构造的表来处理数据。每条记录都附带一个或多个包含信息的列,每条记录的每列可以不同。
基本上,基于列的NoSQL数据库是二维数组,其中每个键(即行/记录)都附加有一个或多个键/值对,并且这些管理系统允许保留和使用非常大且未结构化的数据(例如,有大量信息的记录)。
当简单的键/值对不够时,通常使用这些数据库,并且必须存储包含大量信息的大量记录。实现基于列的无模式模型的DBMS可以非常好地扩展。
基于文件
基于文档的NoSQL数据库管理系统可以被认为是最新的热潮,它成功地吸引了很多人。这些DBMS的工作方式与基于列的DBMS类似;然而,它们允许实现更深的嵌套和复杂结构(例如,文档内,文档内的文档)。
文档克服了柱状数据库的一个或两个级别的键/值嵌套的约束。基本上,任何复杂和任意的结构都可以形成一个文档,可以使用这些管理系统进行存储。
尽管它们具有强大的性质,并且能够通过单独的密钥查询记录,但与其他密钥相比,基于文档的管理系统有其自身的问题和弊端。例如,检索记录的值意味着获取它的全部内容并且更新相同,所有这些都会影响性能。
基于图形
最后,NoSQL数据库管理系统非常有趣的是基于图形的系统。
基于图形的DBMS模型以与前三个模型完全不同的方式表示数据。它们使用树状结构(即图形),其中节点和边缘通过关系相互连接。
与数学类似,由于链接和分组相关信息(例如,连接的人)的性质,使用这些类型的模型执行某些操作要简单得多。
应用程序通常使用这些数据库,因此必须建立明确的连接边界。例如,当您注册到任何类型的社交网络时,您的朋友与您的关系以及他们与朋友的朋友之间的关系更容易使用基于图形的数据库管理系统。
禁用基于文档的数据库
1)MongoDB
2)DynamoDB
Here is difference for your reference
我将优先考虑DynamoDB
如果要将数据导入某个数据库,请尝试使用MS SQL Server 2008 R2,因为它非常用户友好,可以让您更准确,更准确地完成工作。如果你想这样做而不需要任何费用,那么mysql将是一个更好的选择(更好的MySQL编辑器是SQLYog)。我希望这对你有益。
简答: 我认为,在你提到的结构和条件中有1亿个文件使用NoSQL并不是很大。你可以使用PostgreSQL和MySQL等处理它们。
请注意:很长一段时间,维基百科使用MySQL(现在不是)。见Reference
以上是关于针对这种特殊需求的最佳数据库和数据库设计的主要内容,如果未能解决你的问题,请参考以下文章