我们正在运行的应用程序收集数据的速度比我们预期的要快得多。为了适应这一点,我们正在重新设计数据库。读完这个、这个和这个后,我不确定我们设计的最佳方法是什么......考虑到我们的硬件非常简陋。
三个主要表导致了问题:
目前我们只有一张表来存储数据。它们之间的关系是:
目前我们每天执行大约 100 次扫描。也就是说,每天向 VALUES 中插入大约 20,400,000 个项目。
我们正在考虑将 VALUES 表拆分为一个“VALUE_table_per_month”:
在这两种情况下,如果我们增加每天的扫描次数,似乎没有一个解决方案具有可扩展性。
此时,出于可扩展性的原因,将所有数据保存到集中式数据库中似乎不是最佳选择……但与此同时,分布式系统将显着增加加载时间。
什么是合理的方法?我确信我们不是第一个发现这个问题的团队!:P
编辑
每个查询读取多少数据?
这取决于扫描。并非所有扫描都具有相同数量的数据。范围变化如下:
该信息在前端呈现给最终用户。因此,我们将查询请求的方式拆分到后端,以避免服务器过载,但在某些情况下,由于 VALUES 数量较多,这还不够。
什么时候读取数据?
这完全取决于最终用户。有时他们每天会读 10 篇 SCANS,有时则不读,有时甚至每天读 …
重新启动服务器后,我无法再启动 mysql。
我遵循了这里发布的几个解决方案:
我运行以下命令来启动该服务:
mysql
>> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Run Code Online (Sandbox Code Playgroud)
sudo service mysql start
>> Job for mysql.service failed because the control process exited with error code.
See "systemctl status mysql.service" and "journalctl -xe" for details.
Run Code Online (Sandbox Code Playgroud)
systemctl status mysql.service
>> mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2022-01-26 15:18:33 UTC; 47s ago
Process: 2612 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre …
Run Code Online (Sandbox Code Playgroud)