Create GUIDs online 全球唯一主键 作者:QQ 14588019 WonderfulLife 本范例中不能使用guid编号作为明细的id,如果这么干,明细将无法查询,分页就更别谈啦 https://www.guidgen.com/ 百度拾取坐标系统 http://api.map.baidu.com/lbsapi/getpoint/index.html 站长工具 时间转 unix时间戳 http://tool.chinaz.com/Tools/unixtime.aspx 假如有这样一个主从表,记录全国每个人一生当中移动的轨迹,每1秒记录一次经纬度坐标, 这样我们就可以在此基础数据上分析用户的生活习惯 T95次 武昌-深圳 火车时刻表 114.324393,30.534197 武昌火车站 17:40 114.295448,29.885403 咸宁火车站 18:28 113.936372,29.727576 赤壁火车站 18:56 113.019455,28.200103 长沙火车站 21:17 113.520746,24.756814 韶关东火车站 02:11 113.262337,23.153768 广州火车站 04:32 114.123611,22.537961 深圳火车站 06:13 杨帆乘车时间2018-04-25 17:40:00 在1天的时间内定位表locations会生成86400笔记录, 明细表1个月会生成2592000笔记录(差不多260万笔记录),1年会生成946080000(差不多9.5亿笔记录) 所以这样的主从表,就是个 一对超级多 的数据模型啦 假如这个记录人生时刻轨迹系统从杨帆18岁乘坐T95次武昌-深圳火车开始记录他的移动路线, 跳过18年前的流水号946080000 x 18 = 17029440000 (个),那么系统分配给他的第1个流水号 就应该是1017029440001,这个位数的整数再长命的人也够用啦 给杨帆一个湖南邵阳县的身份证编号430523198612060001 users表(主表) userid username mobile 430523198612060001 杨帆 13500135000 430523198612060002 田野 13800138000 locations表(从表) unixtime longitude latitude userid id 1524649200 114.324393 30.534197 430523198612060001 430523198612060001:1017029440001 1524652080 114.295448 29.885403 430523198612060001 430523198612060001:1017029442881 1524653760 113.936372 29.727576 430523198612060001 430523198612060001:1017029444561 1524662220 113.019455 28.200103 430523198612060001 430523198612060001:1017029453021 1524679860 113.520746 24.756814 430523198612060001 430523198612060001:1017029470661 1524688320 113.262337 23.153768 430523198612060001 430523198612060001:1017029479121 1524694380 114.123611 22.537961 430523198612060001 430523198612060001:1017029485181 特别提醒一下主表记录太多啦生老病死,每10万个身份证编号作为1组存储到队列里或者有序集合里, 这样性能一级棒,分页需要身份证集合编号扩容能力也很大很大,也能分页查询啦,例如: 第1组身份证编号集合队列名称的键可命名为user:list:100000 430523198612060001 第2组身份证编号集合队列名称的键可命名为user:list:200000 420921198612069999 MULTI INCR user:count # 根据用户数决定当前用户的身份证编号应该存储在那一组队列里, # 新增用户已经达到503649个,那么它应该存储在键名称为user:list:600000的队列里了 GET user:count SET user:430523198612060001 "{\"username\":\"杨帆\",\"mobile\":\"13500135000\"}" LPUSH user:list:100000 430523198612060001 # 队列中保存的身份证编号集合用来分页 EXEC ======================================================================================================== 新增第1条明细 SET user:430523198612060001:start 1017029440001 # 系统开始记录的第1条轨迹起始点 MULTI SET user:430523198612060001:1017029440001 "{\"unixtime\":1524649200,\"longitude\":114.324393,\"latitude\":30.534197}" SET user:430523198612060001:current 1017029440001 # 系统实时分配的id编号 EXEC --------------------------------------------------------------------------------------------------- ... ... ... ... ... ... ... ... ... ... ... ... --------------------------------------------------------------------------------------------------- 新增第2880条明细 MULTI SET user:430523198612060001:1017029442881 "{\"unixtime\":1524652080,\"longitude\":114.295448,\"latitude\":29.885403}" SET user:430523198612060001:current 1017029442881 # 系统实时分配的id编号 EXEC -------------------------------------------------------------------------------------------------- ... ... ... ... ... ... ... ... ... ... ... ... -------------------------------------------------------------------------------------------------- 新增第4560条明细 MULTI SET user:430523198612060001:1017029444561 "{\"unixtime\":1524653760,\"longitude\":113.936372,\"latitude\":29.727576}" SET user:430523198612060001:current 1017029444561 # 系统实时分配的id编号 EXEC -------------------------------------------------------------------------------------------------- ... ... ... ... ... ... ... ... ... ... ... ... -------------------------------------------------------------------------------------------------- 新增第13020条明细 MULTI SET user:430523198612060001:1017029453021 "{\"unixtime\":1524662220,\"longitude\":113.019455,\"latitude\":28.200103}" SET user:430523198612060001:current 1017029453021 # 系统实时分配的id编号 EXEC -------------------------------------------------------------------------------------------------- ... ... ... ... ... ... ... ... ... ... ... ... --------------------------------------------------------------------------------------------------- 新增第30660条明细 MULTI SET user:430523198612060001:1017029470661 "{\"unixtime\":1524679860,\"longitude\":113.520746,\"latitude\":24.756814}" SET user:430523198612060001:current 1017029470661 # 系统实时分配的id编号 EXEC -------------------------------------------------------------------------------------------------- ... ... ... ... ... ... ... ... ... ... ... ... -------------------------------------------------------------------------------------------------- 新增第39120条明细 MULTI SET user:430523198612060001:1017029479121 "{\"unixtime\":1524688320,\"longitude\":113.262337,\"latitude\":23.153768}" SET user:430523198612060001:current 1017029479121 # 系统实时分配的id编号 EXEC -------------------------------------------------------------------------------------------------- ... ... ... ... ... ... ... ... ... ... ... ... ------------------------------------------------------------------------------------------------- 新增第45180条明细 MULTI SET user:430523198612060001:1017029485181 "{\"unixtime\":1524694380,\"longitude\":114.123611,\"latitude\":22.537961}" SET user:430523198612060001:current 1017029485181 # 系统实时分配的id编号 EXEC ******************************************************************************************************************* 主表分页查询 LLEN user:list:100000 # 返回记录总数 LRANGE user:list:100000 0 20 # 这是第1页的20条记录主键 LRANGE user:list:100000 21 40 # 这是第2页的20条记录主键 LRANGE user:list:100000 41 60 # 这是第3页的20条记录主键 LRANGE user:list:200000 41 60 # 这是第50003页的20条记录主键 LRANGE user:list:200000 61 80 # 这是第50004页的20条记录主键 明细查询 GET user:430523198612060001:start # 首先获得第1条活动轨迹主键后缀流水号,返回值为1017029440001 很容推测出连续的20条明细记录主键编号是以下这些: user:430523198612060001:1017029440001 user:430523198612060001:1017029440002 user:430523198612060001:1017029440003 user:430523198612060001:1017029440004 user:430523198612060001:1017029440005 user:430523198612060001:1017029440006 user:430523198612060001:1017029440007 user:430523198612060001:1017029440008 user:430523198612060001:1017029440009 user:430523198612060001:1017029440010 user:430523198612060001:1017029440011 user:430523198612060001:1017029440012 user:430523198612060001:1017029440013 user:430523198612060001:1017029440014 user:430523198612060001:1017029440015 user:430523198612060001:1017029440016 user:430523198612060001:1017029440017 user:430523198612060001:1017029440018 user:430523198612060001:1017029440019 user:430523198612060001:1017029440020 这就是杨帆第1页活动轨迹经纬度坐标的主键集合 根据这个推理,我可以选择任一1个小时,或者3个小时,或者10分钟的活动轨迹来单独查询,只不过需要写个简单的算法来获得查询结果罢了本篇讲解完毕 未经许可,不得商用出版发行!
Redis键-值数据库 nosql 数据建模(4)------ 如何存储主从表数据 一对超级多关系
猜你喜欢
转载自blog.csdn.net/zhengzizhi/article/details/80035097
今日推荐
周排行