首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的具体目标应该使用哪个数据库?

问我的具体目标应该使用哪个数据库?
EN

Database Administration用户
提问于 2020-10-03 08:33:05
回答 1查看 57关注 0票数 0

导言:

我试图弄清楚我的项目应该使用什么样的数据库,以获得最佳的速度。

背景:

我不确定MySQL是否是最好的解决方案,但我将使用MySQL作为示例来解释我目前拥有的数据。目前(或将要)的数据安排在两个表中。

表1有3列,表2有1列。这两个表将每个表大约有10亿行。

该项目将从表2获得第一个值,并检查它是否存在于表1的第一列。

该项目目前正在一台具有机械驱动器的计算机上运行。

粗略的估计表明,数据将使用大约500 at的驱动器空间。

目标:

  1. 为了能够尽快地将数据插入表中,
  2. 能够比较表2中的每一列,以尽可能快地查看表1第1列中是否存在相同的值。

进展:

目前,我正在将数据插入到MySQL数据库中,并将插入批处理到1000个组中,平均每秒约200个插入。按照这一速度,产生和插入10亿项记录将需要大约2个月的时间。

基准:

生成数据和插入数据的过程是使用大约5%的CPU,16 1GB可用内存中的1GB左右,当检查磁盘IO时,平均约为2MB/s,因此我猜想机械驱动器是瓶颈。我总能听到它在寻觅。

问题:

考虑到可能的机械驱动是瓶颈(如果我错了,这是瓶颈),MySQL是尽快实现上述两个目标的最佳选择,还是我应该考虑和使用的不同类型的数据库?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2020-10-03 12:12:06

XY问题

我在你的帖子里看到太多的红旗,所以我不能发表评论。一般来说,您似乎有一个XY问题。

问题1

我总能听到它在磨蹭。

停止播放!跑!别走!尽快换掉这个HD!!

如果它真的发出了刺耳的声音,那么你的HD已经是吐司了。

问题2

平均约为2MB/s。

现代硬盘驱动器可以在600 MB/s范围中实现IO传输速度。你的观察意味着你有一个与数据库无关的问题。

确保在DB之外运行IO基准测试。如果您的数据处理没有接近测量到的传输速度,那么瓶颈不是磁盘IO。

通常,它与您处理数据的方式有关。

问题3

平均每秒插入200次。

啊!!现在,我们正深入到问题的核心。

这通常表示您正在使用慢速处理方法来加载数据.

您需要批量加载数据。当您这样做时,您应该可以在短短几秒钟内看到接近100万行的INSERT速率。然后,您的IO传输速率应该更接近于您在DB之外测量到的数据。

问题4

以可能的机械驱动为瓶颈

使用RAID设置可以提高IO/IOPS的性能。这适用于HDD和SSD。

问题5

  1. 能够比较表2中的每一列,以尽可能快地查看表1第1列中是否存在相同的值。

关系数据库是基于关系代数构建的。如果您可以将您的业务需求更改为关系代数问题,则解决方案将成为一个无需考虑的问题。

我建议你改变你的要求,以便

  1. Table_1.Column_1中的值需要是UNIQUE和NOT NULL
  2. 数据库不允许接受不符合规定要求的Table_2的数据。

从这里开始,答案变成“在Table_2中指向PRIMARY KEY (TABLE_1.COLUMN_1)的每个列上使用一个D43”。

在INSERT期间,FK检查的开销应该是最小的。

我不知道有任何主要的关系数据库无法处理10亿行子表和/或10亿行父表。所以,MySQL应该很好。(顺便说一句--“软件列表”问题是这个论坛的主题。)

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/276466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档