我从一个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个流(我想,但是我不知道我是否已经丢失了数据),但是我需要显著地扩展它。你知道吗
抱歉,如果这是个愚蠢的问题。你知道吗
编辑:我的数学!=“好”
100
INSERTs
/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。你知道吗
相关问题 更多 >
编程相关推荐