将会有REST API从移动设备收集数据。每个移动设备在将数据发送到API之前都会缓存数据(达到某个限制)。因此,例如,每4分钟,每个移动设备将向API发送50个数据行。一行看起来像这样:
{"uid": "123", "lon": "12.1", "lat": "12.1", "vel": "145", "timestamp": "12345"}
因此,例如,当有1000个有源器件时,可能会发生(最坏情况)将有1000个并行写入,每个写入将插入50"行"。所以事实上,API会在一瞬间尝试向数据库插入50k行。此外,如果每台设备每天发送2小时数据,那么每天将有1 500 000(150万)个新行。
稍后,所有收集的数据将以更大的块发送到另一个服务(由某种工作人员等待X行出现在DB中,他将把它们发送到外部服务)。可能会删除超过7天的所有行。此外,API端点之一将允许基于" uid"来检索过去7天中的一天的数据。 (user_id)和"时间戳"字段。
问题是使用哪个数据库(或数据库/工具的组合)来处理多次写入/秒?
我的第一个想法是使用DynamoDB,因为它超级易于扩展(我可以只购买写入/秒),但它不可能在一瞬间处理50k写入。所以我的第二个想法是使用一些中间数据库来缓存50行的块,这些行将由后台工作者/进程插入到主数据库中,同时具有处理块的一些限制。
我相信今天有很多应用程序从移动设备收集大量数据(如GPS位置,速度等) - 他们是如何做到的?
我不是在问dba,因为它可能不仅仅是数据库特定的问题。
答案 0 :(得分:1)
我刚刚将150万行插入完全索引的表中。我使用了单个线程,PostgreSQL数据库,在我的笔记本上运行。整件事花了45.1秒。
如果这是您的所有日常数据,请不要费心发明轮子。让自己获得PostgreSQL和多核服务器。