从多个线程访问大型数据库表

时间:2017-02-20 15:14:27

标签: mysql database multithreading

我需要为我的数据库提供专家建议。基本上我们在全世界拥有100多个传感器。我们从传感器收集数据并存储在数据库中以备将来使用。

目前,我为每个客户创建了一个单独的数据库表,即当客户注册到应用程序时,我为它们创建了一个单独的表,来自该客户的所有传感器的数据都转到它们各自的数据库表中。

现在客户数量在增加,表格的数量也在增加,而且这种方法看起来不再好看(可能这种方法首先不是正确的)。

我现在想将所有数据保存在一个表中,因此我将客户表中的所有数据复制到一个新表中。现在,新表的大小超过5GB,超过3400万行(并且还在增长)。

如果我想同时在这个新表中插入新行,从每个传感器的多个线程,它需要太长时间。从同一个表访问数据也需要很长时间。

如何解决此问题?还有其他解决方案吗?我应该使用一些外部云服务来存储数据吗?

提前致谢!

编辑: 我正在使用索引。这是表模式

enter image description here

使用UNIQUE INDEX idx_userInsDateuserIDinstrumentIDutcDateTime

我也研究了数据库分片,但我的主要问题是,从多个线程向同一个表插入行并从多个线程读取数据需要一些时间。

2 个答案:

答案 0 :(得分:0)

有了这些有限的信息,这是我的建议。

当从许多不同的客户收集数百万行时,除非必须一起收集数据以便“轻松报告”,否则绝对可以使用客户特定的表甚至是客户特定的数据库,这绝对没问题。

这实际上有几个好处,包括保护您免于将一个客户信息暴露给另一个客户,因为他们的所有数据都在1个表中。

随着您的客户数量增加,您可以获得每个客户的新数据库或新表格,这很好,这可能是您希望在软件中自动化的内容。例如,如果客户注册,则会自动创建此表。

根据您的具体情况,场景和设计都很常见且完美无缺。例如,我曾经拥有一家产品公司,而且该公司的每个客户都拥有自己的整个数据库。随着我的客户数量的增加,我的数据库数量也随之增加。这与你每个客户拥有一个数据库或表格以及你选择那条路线没什么不同。

无论你选择什么,你都必须考虑你的sql备份,数据库的大小与可用的硬盘空间等。如果表的数量持续增长,也许每个客户都应该拥有自己的数据库,但是对你来说有多难如果需要,请备份所有这些数据库并将它们与中央数据库相关联。只需考虑这样的一切,包括安全性和报告需求,需要保留多少数据等等。

这是我前段时间写的关于多租户数据架构的另一篇文章。 https://stackoverflow.com/a/38555345/671343

检查出来,希望这会对你有所帮助。你并不是唯一一个为此做出设计决定的人。只需权衡报告,安全性,备份等所有选项。

希望有用

答案 1 :(得分:0)

对你的scenerio使用 Mongo 或类似的数据库,这是需要Mongo的确切场景。

一次多个记录插入非常快,与其他记录隔离,因此更快\

如果您为数据组建了适当的数据结构树,则读取速度更快

正确的结构将有助于减少为每个客户创建新表的要求。