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/

results matching ""

    No results matching ""