mysql的高吞吐量,安全插入?

2024-05-17 11:13:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我从一个websocket连接接收大量接近并发级别的数据。数据以json格式提供,表名需要进入,数据需要进入4列(所有4列都是int或double,以显示数据类型和比例)。你知道吗

例如,假设我每秒获得1000行数据,需要转到大约100个不同的表(因此每表每秒10行)。我对MySQL(特别是MariaDB)中这种规模的数据还比较陌生。在我开始之前,我是否需要担心这么快就给数据库写信?是否会有积压工作/如果在插入完成之前得到另一个查询,是否会丢失无法插入的数据?不管怎样,我能判断我是否丢失了数据吗?你知道吗

我的计划是用Python编写,但是如果C++是C++的,那么它就可以调整它(只有当它成为一个问题时,不一定只是为了提高性能)。你知道吗

完整数据流:

Websocket处理程序:

你知道吗连接:wss://…../流?=stream1&;流100

回调:@process\u data(msg)

    def process_data(msg):
        #msg exp: {"table":"stream1", "v1":100, "v2":101, "v3":.000005, "v4":.0002} 
        connection.execute("""INSERT INTO {} 
                              VALUES ({}, {}, {}, {})
                           """.format(
                                      msg['table'], 
                                      msg['v1'],
                                      msg['v2'],
                                      msg['v3'],
                                      msg['v4']
                                     )
                           )

我每秒得到1000毫克。你知道吗

TL;DR:我会丢失数据/弄乱这个设置吗?它在一个小的基础上使用2个流(我想,但是我不知道我是否已经丢失了数据),但是我需要显著地扩展它。你知道吗

抱歉,如果这是个愚蠢的问题。你知道吗

编辑:我的数学!=“好”


Tags: 数据jsondata格式tablemsgv3级别
1条回答
网友
1楼 · 发布于 2024-05-17 11:13:52
<>主要开销是MySQL,不是Python或C++,所以不要改变应用语言。你知道吗

100INSERTs/second是我使用的比这慢的截止时间,MySQL/MariaDB“只是开箱即用”。比这更快,你可能需要一些调整。你知道吗

在实际情况下,可以通过在一个INSERT语句中插入多行来获得很好的提升。我认为python对此有特殊的要求。一次插入100行(到一个表中)的速度大约是每INSERT插入一行的速度的10倍。你知道吗

固态硬盘可能会给你10倍

曾经有过100万/秒的基准测试,但这并不仅仅是为普通人提供价格合理的硬件。你知道吗

InnoDB有几个可调参数可以更改。(innodb_flush_log_at_trx_commit=2,例如)。你知道吗

至于“丢失的数据”,这是代码另一面的问题。如果MySQL跟不上,它只会得到behinder和behinder。你知道吗

我假设python有一个很好的库来解析JSON?你知道吗

如果“streams”的意思是“threads”,那么每个线程也必须有一个连接,除非您将数据反馈给一个线程来完成所有的写操作。不管哪种方法都行。你知道吗

为什么有100张桌子?如果所有的表本质上是相同的,那么它可能是一个“坏”的模式设计。你知道吗

构建一个测试框架来对代码进行压力测试。如果你得到了2000/秒,那么代码应该足够稳定地达到1000/秒。你知道吗

如果需要远远超过1000/秒,请参见http://mysql.rjweb.org/doc.php/staging_table

PS:1000/100不等于100。你知道吗

相关问题 更多 >