微信第三方平台 后台mysql 用户表怎么设计

微信第三方平台 后台mysql 用户表怎么设计,第1张

说起用户表,大概是每个应用/网站立项动工(码农们)考虑的第一件事情。用户表结构的设计,算是整个后台架构的基石。如果基石不稳,待到后面需求跟进了发现不能应付,回过头来反复修改用户表,要大大小小作改动的地方也不少。与其如此,不妨设计用户表之初就考虑可拓展性,争取不需要太多额外代价的情况下一步到位。

先前设计:

id

username

password

用户名加上密码,解决简单需求,留个id作为其他表的外键。当然,那时候密码还可能是明文存储,好点的知道md5。

后来呢,随着业务需求的拓展,要加个用户状态 status 判断用户是否被封禁,注册时间和注册IP地址、上次登录时间和IP地址备查(并衍生出登录记录表,用来判断是否异地登录等,在此不表),用户角色/权限 role (又衍生出用户角色权限关系,还是另文讨论),业务也需要个人的个人信息如真实姓名、地址等也一股脑往上添加,现在形成了一个很完整的用户关系表。

余额可以单独用一个余额记录表,这样如果要查询每次消费记录的时候,也能查出来每次消费后还有多少余额。余额记录表里面主要是三个字段:用户账号、每次消费后的余额、时间点。

CREATE TABLE account

(

id integer NOT NULL DEFAULT nextval('trade_id_seq'::regclass),

no character varying(10) NOT NULL, -- 账号

balance money NOT NULL DEFAULT 0.00, -- 余额

datetime timestamp without time zone NOT NULL DEFAULT (now())::timestamp(0) without time zone,

CONSTRAINT account_pkey PRIMARY KEY (id)

)

通过每次的余额变化就知道每次消费后的余额情况

select acc.*, (select sum(balance)+acc.balance from account as ac where ac.id <acc.id) as profit from account as acc

id | no | balance | datetime | profit

----+------+----------+---------------------+---------

1 | 1000 |$0.00 | 2013-10-09 10:51:10 |

2 | 1000 | $12.60 | 2013-10-09 10:51:22 | $12.60

4 | 1000 | $16.80 | 2013-10-09 10:51:42 | $29.40

5 | 1000 | $100.00 | 2013-10-09 10:51:49 | $129.40

6 | 1000 | $200.00 | 2013-10-09 10:56:35 | $329.40

7 | 1000 | $50.45 | 2013-10-09 10:57:23 | $379.85

8 | 1000 | $75.50 | 2013-10-09 10:57:31 | $455.35

9 | 1000 | -$55.30 | 2013-10-09 10:59:28 | $400.05

10 | 1000 | -$200.00 | 2013-10-09 10:59:44 | $200.05

(9 rows)

在老版本的MySQL 3.22中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL 3.23开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)。也就是说,从目前的技术环境来看,MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定,而是由所在主机的OS上面的文件系统来决定了。

而MySQL另外一个最流行的存储引擎之一Innodb存储数据的策略是分为两种的,一种是共享表空间存储方式,还有一种是独享表空间存储方式。

当使用共享表空间存储方式的时候,Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单 表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。

而当使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6149435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存