以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [讨论]问一个数据库设计的性能问题,开放过大型应用开发的老鸟请尽量多给意见  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=93424)

--  作者:chen3728060
--  发布时间:2016/11/28 17:51:00
--  [讨论]问一个数据库设计的性能问题,开放过大型应用开发的老鸟请尽量多给意见

就是这样的,我想开发一个母婴店的进销存(我知道进销存包含很多东西,不过这不是我讨论的重点,姑且不要管我要开发的进销存有复杂)。我们就当做是一个简单库存管理,出库入库,统计库存,商品档案,也即是1个商品档案表+1个库存流水表,就这样好了。

 

然后我遇到一个这样纠结的事情:

我是打算数据库放阿里云上,然后每个客户都是客户端连接上服务器,每个客户有自己的ID,可以自行注册试用我的母婴软件,合适了就付款购买,按年付费。

 

那现在数据库设计,有2种思路:

①只有1个数据库,一共2个表,表里的都有一个用户ID的列,来区分数据是谁的。将来我有1w个用户了,我还是只有2个表。100w个客户,我还是只有2个表。如果每人1个商品,商品档案表里都有100w行东西,每人100个商品就10000w行数据,用户越来越多后,每次遍历提取数据,查询性能会急剧下降。但是我开发和查询更新都很方便,只需要针对1个数据库

 

②每个用户自己1个数据库,注册一个用户,就自动新建1个数据库,1个用户就2个表。那我1w个用户了,就有1w个数据库,每个数据库里只有2个表。好处是,那个sb客户乱操作,或者搞得乱七八糟,我只要删了这个数据库,世界都清净了,不会影响其他客户,而且查询性能不会急剧下降。但是,我维护起来很麻烦,例如更新表结构,我要全部更新,然后狐表也是,也弄多少个客户端版本,让客户去连接自己对应数据库啊?

 

你们开发那些公开使用的网站,不也是面向全互联网的陌生人吗?这么多用户?也是一个数据库撑完了?

 

 还是有大神有更加厉害的①+②混合动力思路?

[此贴子已经被作者于2016/11/28 18:03:17编辑过]

--  作者:有点色
--  发布时间:2016/11/28 19:51:00
--  

一个用户一张表或者一个库。

 

表名或者库名,要用用户id来命名。

 

如果是更新表结构的操作,只需要用代码更新一个库,其余的用循环即可。

 

至于你说的客户端的问题,你可以用动态的连接字符串啊,也就是用户输入自己的 数据库名、用户名、密码,就连上去。


--  作者:有点蓝
--  发布时间:2016/11/28 20:58:00
--  
如果是我,首先我会分析需求,设计出一套合适的表,2张表肯定是不够的;

对于数据增长比较快的表,我会考虑做2套,一套为历史表,存储1年前甚至更久的数据,甚至按数据量可以分为多套历史表;

试用用户可以放到另外一个试用数据库中。

个人感觉:
不管是100W张表还是100W个数据库都是一种灾难;
千万级的数据不是问题;
100W个用户并非都是活动用户;
从0到100W的增长,你估计要多长时间?1年?10年?还是更长?在这个增长的过程中你的业务是如何发展的?一直是这种被动的平台模式?还是可以分销、代理?还是其它......
不要想着做一个软件可以用一辈子,从1W到10W以至100W甚至更多的时候,软件架构也会随着不断更新重构以适合未来的变化。
作为母婴市场,当你达到100W用户的时候,还找不到一个团队帮你处理大数据?

所以,不要考虑那么多,先做吧,等你到达这个级别的时候自然有这个级别的解决方法。

--  作者:chen3728060
--  发布时间:2016/11/29 9:53:00
--  回复:(有点蓝)如果是我,首先我会分析需求,设计出...

那就按照狐表最直接的方式,开发一个数据库的,把软件弄好了,捞到小钱了,慢慢做大,到了数据量真够多时,估计都有钱和有人脉可以找到技术大牛解决大数据的问题。

 

试用版的就单独丢一个数据库好了,把乱七八糟的数据放里面

[此贴子已经被作者于2016/11/29 9:53:12编辑过]