7.1 数据库建表
持久化数据库[mysql]
用户信息表
create table OBO_TABLE_USER
(
u_id bigint not null primary key AUTO_INCREMENT,
u_name VARCHAR(32) not null,
password VARCHAR(32) not null,
phone VARCHAR(11) not null,
createtime timestamp not NULL DEFAULT CURRENT_TIMESTAMP,
email VARCHAR(64),
id_card VARCHAR(18) not null,
driver VARCHAR(6) not NULL DEFAULT "no"
constraint uq_u_name unique(u_name), constraint uq_id_card unique(id_card)
);
+------------+-------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+-------------------+----------------+
| u_id | bigint(20) | NO | PRI | NULL | auto_increment |
| u_name | varchar(32) | NO | UNI | NULL | |
| password | varchar(32) | NO | | NULL | |
| phone | varchar(11) | NO | | NULL | |
| createtime | timestamp | NO | | CURRENT_TIMESTAMP | |
| email | varchar(64) | YES | | NULL | |
| id_card | varchar(18) | NO | UNI | NULL | |
| driver | varchar(6) | NO | | no | |
+------------+-------------+------+-----+-------------------+----------------+
插入数据sql例子:
insert into OBO_TABLE_USER
(u_name, password, phone, email, id_card, driver)
values
("gailun", "123123","133333333","[email protected]",
"210303198932831123", "yes");
订单表
缓存数据库[redis]
sessionid和用户信息映射表(HASH)
key: online-driver-[sessionid]
(司机临时状态表)
字段 | 字段名 | 值 |
---|---|---|
field | u_name | "盖伦" |
field | driver | "yes" |
field | status | "idle"/"ready"/"catching"/ "driving"/"error" |
field | passenger | "online-user-[sessionid]" or "NONE" |
说明
(1) 这个key具有一定的过期时间,当每次访问此key的时候,重新生成过期时间,并且以最后一个访问开始定时。
如果sessionid存在,代表此用户已经登录,如果session不存在,那么就要求用户重新登录。
(2) status字段:
idle: 目前司机已经登录,但是并未开始接单状态。
ready: 目前司机出于开始接单状态。
catching: 司机已经确定接单,正在寻找乘客。
driving: 乘客已经上车,司机确定正是开始接单。
error: 意外故障。
(3) passenger字段:
如果该司机出于ready状态:
乘客选择该司机,或者web应用服务器自动分配司机给一个用户给该司机,那么passenger会被设置该乘客的sessionid。
否则,该字段被设置为"NONE"
===========================================
key: online-user-[sessionid]
(乘客临时状态表)
字段 | 字段名 | 值 |
---|---|---|
field | u_name | "德莱文" |
field | driver | "no" |
field | status | "idle"/"waiting"/"traveling" |
field | driver | "online-driver-[sessionid]" or "NONE" |
说明
(1) 这个key具有一定的过期时间,当每次访问此key的时候,重新生成过期时间,并且以最后一个访问开始定时。
如果sessionid存在,代表此用户已经登录,如果session不存在,那么就要求用户重新登录。
(2) status字段:
idle: 目前乘客已经登录,但是并未开始约车状态。
waiting: 乘客已经点击约车,并且由自己或者服务器选择了一位司机,但是司机尚未确定订单,而是在"catching"状态。
traveling: 司机已经确定乘客上车。
error: 意外故障。
(3) passenger字段:
如果该司机出于ready状态:
乘客选择该司机,或者web应用服务器自动分配司机给一个用户给该司机,那么passenger会被设置该乘客的sessionid。
否则,该字段被设置为"NONE"
用户详细信息表(HASH)
key: OBO_USER_INFO_username
字段 | 字段名 | 值 |
---|---|---|
field | u_name | "盖伦" |
field | longitude | 1.0001231 |
field | latitude | 1.2221113 |
field | driver | "yes" |
sessionid和用户名对应关系(String)
key: online-driver-[sessionid]
(在线司机sessionid,具有生命周期)
value: username
================================
key: online-user-[sessionid]
(在线乘客sessionid,具有生命周期)
value: username
这个key具有一定的过期时间,当每次访问此key的时候,重新生成过期时间,并且以最后一个访问开始定时。
如果sessionid存在,代表此用户已经登录,如果session不存在,那么就要求用户重新登录。
司机临时地理位置信息表(GEO-SortSet)
key: ONLINE_DRIVER_GEO_ZSET
member: sessionid
score: GEOHASH
如:
member: "online-driver-xxxx-xxx-xxx-xxx-xxxx" score:"3479099956230698"
乘客临时地理位置信息表(GEO-SortSet)
key: ONLINE_USER_GEO_ZSET
member: sessionid
score: GEOHASH
如:
member: "online-user-xxxx-xxx-xxx-xxx-xxxx" score:"3479099956230698"
相关GEOHASH解释 http://blog.jobbole.com/80633/