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

Mysql 从多个线程访问大型数据库表,mysql,database,multithreading,Mysql,Database,Multithreading,我的数据库需要专家的建议。基本上我们在全世界有100个传感器。我们从传感器收集数据并存储在数据库中以备将来使用 目前,我为每个客户创建一个单独的数据库表,即,当客户注册到应用程序时,我为他们创建一个单独的表,来自该客户的所有传感器的数据将进入他们单独的数据库表 现在客户的数量在增加,表的数量也在增加,这种方法看起来不再好了(可能是这种方法一开始就不正确) 我现在想将所有数据保存在一个表中,因此我将客户表中的所有数据复制到一个新表中。现在,新表的大小超过5GB,超过3400万行(并且还在增长) 如

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

目前,我为每个客户创建一个单独的数据库表,即,当客户注册到应用程序时,我为他们创建一个单独的表,来自该客户的所有传感器的数据将进入他们单独的数据库表

现在客户的数量在增加,表的数量也在增加,这种方法看起来不再好了(可能是这种方法一开始就不正确)

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

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

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

提前谢谢

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

具有唯一索引
idx\u userInsDate
userID
instrumentID
utcDateTime


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

鉴于这些有限的信息,这里是我的建议

当从许多不同的客户收集数百万行时,除非为了“方便报告”而必须将数据收集在一起,否则一定可以使用特定于客户的表,甚至特定于客户的数据库,这是绝对正确的

这实际上有几个好处,包括防止您在发生事故时将一个客户的信息暴露给另一个客户,因为他们的所有数据都在一个表中

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

根据您的情况,场景和设计都很常见,并且非常好。例如,我曾经拥有一家产品公司,每个客户都有自己的整个数据库。因此,随着我的客户数量的增加,我的数据库数量也随之增加。这与为每个客户提供一个数据库或表并没有什么不同,如果您选择了该路径,也没关系

不管你选择什么,你必须考虑你的SQL备份、数据库的大小与硬盘驱动器可用空间等。如果表的数量持续增长,也许每个客户都应该有自己的数据库,但是如果你需要这么做,那么备份这些数据库和将它们与中央数据库联系起来会有多难。只需考虑这样的一切,包括安全性和报告需求,需要保留多少数据等等。

这是我不久前写的另一篇关于多租户数据体系结构的文章。

看看吧,希望这对你有帮助。你不是唯一一个在设计决策上挣扎的人。考虑到报告、安全性、备份等,只需权衡所有选项


希望这有帮助

为您的场景使用Mongo或类似的DB,这正是需要Mongo的场景

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

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


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

如果没有任何有关架构或索引的信息,就不可能回答如此广泛的问题。在任何情况下,当您有像用户ID这样清晰的分区标准时,为什么要使用单个表呢?安全方面的影响如何?单个SQL注入漏洞可能会暴露每个人的数据。此外,在表中插入单独的行会很慢。将传入行插入暂存表并定期将其加载到大表中会更容易。在任何情况下,您都没有提供足够的信息来给出具体的答案,除非“不要这样做”。数据库模式不应该由表的数量决定,而是由特定的要求和仔细考虑决定。您还应该查看Amazon、Azure提供的物联网服务和课程。即使你不使用他们的服务,你也可以从他们那里复制想法。例如,您可以将行附加到存储文件,而不是每个传感器都写入数据库。这些可以是特定于客户的。在我看来,我认为关系数据库不会有帮助,我认为你需要寻找NoSql解决方案,如Mongodb、Cassandra等,因此你可以将数据分布在多个服务器上,当然,如果你不想构建自己的集群,那么云服务将有所帮助