recherche

Maison  >  Questions et réponses  >  le corps du texte

高并发写入mysql的设计

最近开发一个项目。客户端每隔10秒提交100行数据给服务端,服务端查重后写入。
客户端约在几万左右,提交数据比较集中,不考虑读数据的问题。
现在的设计是:
数据库按客户端进行分表。每个表的数据量不高。
服务端获得数据后,先插入redis队列,然后在通过定时任务插入数据库。
问题是:
1、服务端提供给客户端的接口,是否能满足几千上万的客户端同时post数据(客户端是10秒提交一次)?
2、将数据首先保存在redis队列中,如果有几十上百万的数据,redis是否稳定?
基本目标是保证服务端能正常提供服务。

---------------------- 补充内容 -------------------------------
项目主要是采集用户的数据。开机就会自动运行。
每次提交100条,10秒提交一次,一般用户每天在10次以内,也就是1000条数据以内。
每条数据包含五六个值对,在100字符以内。
需要保证每天数据的完整性。会出现多个客户端采集同一用户数据的情况,所以需要避免重复。

现在考虑是这样的:
数据表按用户分表。
用户提交的数据按用户先保存在redis队列中,即每个用户每天一个队列,保存到数据库后,删除该队列。


高洛峰高洛峰2925 Il y a quelques jours834

répondre à tous(3)je répondrai

  • 三叔

    三叔2016-11-11 13:35:54

    第一个,有几个考虑

    带宽是否足够

    cpu数量,假如4核,php-fpm的数量也是4个的话,每个请求需要50-150ms的处理时间,算下持续时间内处理的请求量大概是多少。

    内存,一个进程10-25M的内存占用。

    可以考虑的有:负载均衡,dns轮询。同时注意集群的高可用。

    第二个,也有几个考虑

    数据行,一行的长度是?redis对于1k以上都会有性能下降。

    处理速度,队列里面会堆积多少数据,占用内存多大

    redis架构,如何保证数据不丢失,如何做高可用

    目前的资源是否允许该方案,是否有其它方案。


    répondre
    0
  • 欧阳克

    欧阳克2016-11-11 13:35:41

    使用MyCat

    répondre
    0
  • 三叔

    三叔2016-11-11 13:35:31

    合并插入,不要1条1条插入,比如对应同一张的插入操作,合并1000条插入,这样可以减少交互的次数

    如果这张表只是简单的插入和查询的操作,不需要事务支持的,可以考虑使用MyISAM引擎,相对于InnoDB,在插入时可以获得更高的性能


    répondre
    0
  • Annulerrépondre