定位服务的数据表设计


目前有大概300多个终端(智能手机)需要每20s向服务器发送一次坐标,携带信息包括电话号码和坐标以及类型等其他信息,后续也可能有新的终端加入到系统,这个加入是全自动的,也就是一个新的智能手机,装了一个app之后就开始上传,没有注册什么的步骤。

另外需要提供一个包含地图的页面让客户能够看到这些终端的最新位置并实时刷新,拟采用ajax轮训,每30秒查询一次服务器。

准备采用mysql,现在觉得数据库结构不确定,有几种思路:
1 一个表搞定数据


 phone    type    x    y    updated

收到终端定位请求就插入一条记录,页面查询的话通过sql语句查出每个终端最新的位置

这样感觉比较简单,每次请求只需一次插入操作,但是如果后续终端包含的信息多起来的话,担心冗余,比如这个表里面 type就重复存储了。

2 两张表

表1:元数据


 phone    type    x    y

表2:轨迹数据


 phone    x    y    updated

这样收到终端定位,首先插入一条记录到表2,然后判断表1里面有没有这个phone,没有就代表新增设备,insert一条记录,有的话就更新坐标。
页面查询就查询表1。

这个方式会导致在收到终端坐标需要两次操作,可能需要事务控制。

不知道这些方式那个可行?有没有做过类似项目的给点经验?

另外,后台用node做靠不靠谱?

node.js mysql

咆哮的肛门 10 years, 3 months ago
  1. 方式2是对的。终端自身的数据是持久性的,终端位置是非持久的。这两类数据分开绝对是个好主意。
  2. 数据库用mysql估计300多个终端还能顶得住。但还是早做准备为好。终端多了迟早需要mysql+redis。
  3. 看不出有什么需要事务的地方。这个应用的策略绝对是牺牲整批数据完整,来给响应速度让路的。
  4. 高并发时保证表2的写入性能,表1的读取可以次要保证,而表1的写入就用异步的手段去拖延。当然这种时候就不光需要分表了,而是必须分库甚至分服务器。
  5. nodejs做后台没有致命的问题,值得一用。
比黑更黑更黑 answered 10 years, 3 months ago

Your Answer