针对这种特殊需求的最佳数据库和数据库设计

时间:2017-12-26 05:44:48

标签: database database-design

我希望在数据库中存储大约5000万到1亿个文档,并且能够以非常快的速度进行查询。文档看起来像这样:

{
  name: 'example',
  value: '300,201,512'
}

value列始终是唯一的,name不是。 现在我希望能够仅使用查询检查是否存在具有特定值的文档。什么数据库是最好的选择,哪种设计最适合这样的查询的最快速度?

3 个答案:

答案 0 :(得分:1)

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

  

目前,我们正在开发aws datalake,性能非常快   将数据存储在s3中,然后通过athena返回。

答案 1 :(得分:0)

如果要将数据导入某个数据库,请尝试使用MS SQL Server 2008 R2,因为它非常用户友好,可以让您更准确,更准确地完成工作。如果你想这样做而不需要任何费用,那么MySQL将是一个更好的选择(更好的MySQL编辑器是SQLYog)。我希望这对你有益。

答案 2 :(得分:0)

简答
我认为,您提到的结构和条件中的1亿份文档不是 BIG ENOUGH 来使用NoSQL。您可以使用PostgreSQL和MySQL等处理它们。

请注意:很长一段时间,维基百科使用MySQL(现在不是)。见Reference