关于我正在处理的项目的sql数据库设计的问题。
我将每隔几秒钟接收一次数据,然后我需要将这些数据存储到数据库中。我正在使用mySQL作为我的DBMS。数据需要存储在数据库中,并且每个数据都附加一个用户标识。我只会为每个应用程序处理一个用户。因此,应用程序的每个实例仅处理一个用户数据。远程数据库将存储所有用户数据。所以,这就是为什么我需要userid来知道谁的数据是谁。
我的想法是等到我收到50个数据包并创建一个包含所有50个数据包的分隔字符串。 (可能用逗号分隔)然后将该字符串与userid一起推送到数据库。并存储这样的数据。我的问题是,这是一个很好的方法吗?有没有更好的办法?这是不好的做法吗?提示请! =)
我将收到很多这样的数据。一秒钟的数据包,有时更快。请让我知道你的想法。
DBMS将在远程计算机上运行。该应用程序将在Android手机上运行。
提前致谢!
答案 0 :(得分:2)
我不建议将一堆值连接在一起,以将分隔的字符串发送到数据库。这只会在数据库上创建额外的工作来解析字符串。
任何与数据库交互的合理框架都允许您创建和发送具有不同绑定变量值的SQL语句批量到数据库。这保持了存储过程或INSERT语句的良好,友好的语法,它使数据库正确地标准化,并且它实现了最小化往返次数的性能目标。
答案 1 :(得分:1)
您真正需要回答的问题是您对丢失数据的容忍度。每秒传输1k数据的请求并不多,尤其是使用json与xml。然后,电池寿命是移动设备上要记住的事情,因此每5-60秒发出一次请求也是可行的。
您无法将更新批量处理到服务器。
如果您无法容忍数据丢失,则可以在本地存储上收集50批更新,并上传它们。如果传输失败,您可以重新发送。但是,在这种情况下,我希望有一些合理保证是唯一的记录ID,例如UUID。这样,服务器可以查看已处理的记录,并将其从重新处理中排除。
答案 2 :(得分:1)
如果dbms在一台好的服务器上运行,并且你对数据的所有操作都是对一个相当简单的表的简单插入,那么每秒1次插入根本不应该是一个压力。我希望它几乎不可测量。
答案 3 :(得分:1)
我将解决将其存储为分隔字符串的问题。你打算在存储后查询这些数据吗?如果您需要查找一个或一小组值但不是整个字符串的数据,不要考虑以这种方式存储数据,因为它会在查询时给您带来可怕的性能,并且编写查询会非常痛苦。通常,在一个字段中存储多个dat是一件坏事,这意味着您需要一个相关的表。
此外,对于您正在做的事情,如果您不需要分析查询数据,那么nosql数据库可能是比关系数据库更好的选择。