每X秒更新一次数据库


Updating Database every X seconds

首先,我在Android中构建应用程序,并使用PHP作为我的web服务和数据库通信,我使用MySQL数据库。

好吧,问题是:我正在构建一个近实时应用程序,我需要每5秒更新数据库中的一行,同一表中每个用户的行不同。。优化成本的最佳方法是什么?我的意思是,它适用于10个用户。。但我的猜测是,当我得到50-100时,DB就会崩溃。另一个重要的问题是带宽,我真的想尽可能少地使用。

有什么建议吗?如果我在更新特定行之前将所有请求放入队列中,它会防止它崩溃吗?我的意思是。。在同一时间内仍将有50个到DB的连接。。

您可能需要使用LZ4(快速数据压缩)来保持带宽限制。

还应该有一个Java的实现,甚至可能有一个用PHP 编写的实现

对于MySQL服务器,你应该有一些RAM(24-64Gb的猜测)和InnoDB引擎(这样InnoDB缓冲池可以缓存数据/索引)

如果你有MySQL 5.6,你应该使用InnoDB启用memcache,这样你就可以在没有"复杂"SQL解析开销的情况下进行查询。。

使用此"NoSQL"接口,Oracle索赔查询的处理速度可以提高7-9倍

对于高写入环境,您确实应该有一个带有10K/15K磁盘或SSD磁盘的RAID 10阵列来处理写入负载,但这也取决于表结构。。

请注意RAID 5,因为需要计算奇偶校验位并将其写入每个磁盘,因此会受到写入惩罚。RAID 10几乎保持了RAID 0的写入速度,并通过镜像(RAID 1)保护您的数据

MySQL将始终作为线程处理传入连接,因此同时进行100个查询意味着需要创建100个线程来处理该负载。。因此,您应该在MySQL配置中正确配置线程。

好的,所以-带宽和数据库使用情况。

第一个很容易。您可能想要尝试并确定什么是您的最佳值。从一开始就要记住一些事情:

  • 保持您的协议轻松。检查JSON——它是可读的,但足够紧凑。或者您可能想要实现二进制加载
  • 你可能想尝试在混合中加入一些流量控制:
    • 客户端启发:我当前的写入延迟是多少?在X毫秒以下,保持每5秒更新一次。超过X,10秒。超过5xX,30秒
    • 服务器端服务质量(QoS):处理器负载超过X%?向客户端推送一条消息,告诉他们每10秒更新一次,而不是5秒

关于数据库——这可能很棘手,但没有什么是不可能的。一些想法:

  • 缓存您的数据访问;如果您要求记录N,但没有更新,则无需再次访问数据库,只需从内存缓存中读取即可
  • 使用内存中的对象进行读/写,在处理器负载较低、达到时间限制时提交到数据库,或者在处理N个操作时使用