CTO,新设计的所有的表都只有 id 和 detail。我不是很理解,求解释。

2015-05-27 11:04:43 +08:00
 sinux
detail是一个json字符串。

原来的所有的外键和column全都都放到detail里面。

他说这样可以避免外键的混乱和冲突,自己来维护外键关系。
12066 次点击
所在节点    MySQL
115 条回复
zongwan
2015-05-27 20:36:21 +08:00
@kenken
是游戏服务器适合这种结构吗?
如果需要合服(玩家带着的所有道具,道具有自己的强化等级等),克隆多个用户去同一个PK服
有什么trick方法处理吗?
yuankui
2015-05-27 20:41:46 +08:00
你确定你们的CTO不上v2ex吗?
superisaac
2015-05-27 21:48:48 +08:00
这种用mysql作kv有个卵的性能。
为啥不用tokumx?
nino789pzw
2015-05-27 22:14:07 +08:00
@yuankui He's right there....
arbipher
2015-05-27 22:28:04 +08:00
别撕了,别撕了,看新闻
MySQL 5.7.7 JSON labs release
http://mysqlserverteam.com/json-labs-release-native-json-data-type-and-binary-format/
shiznet
2015-05-27 22:36:30 +08:00
@feisan 看了下7楼的文章,写于2009年。我查了下wiki,nosql在09年才开始普及(不知道这样说可以么)。如果放到现在的话,friendfeed还会继续选择使用mysql做kv存储么,我个人表示怀疑。

不过我对将mysql作为schema-less的存储持中立,对文章中提到的:scaling our existing features to accomodate more traffic turned out to be much less of an issue than adding new features.持赞同
falcon05
2015-05-27 23:23:58 +08:00
一开始我也准备喷为毛不用nosql,但看完了7楼的链接,我发现这样做还真有点道理,一种典型的用空间换时间的做法,充分利用了索引和MySQL较为成熟事务处理,可以做到快速查询跟安全存储,而且扩展性也不错。配合异步处理和自动化,就是一套完整的解决方案
pubby
2015-05-28 00:31:13 +08:00
看业务需要了,在一些业务需求多变的场合,当kv用,或者部分column当kv用有时候还是很方便的。
cevincheung
2015-05-28 00:43:35 +08:00
@kenken 事物指的不是单纯的操作成功,在事物过程中的其他计算才是最关键的。如果说表结构是类似这样:

users: id, detail
orders: id, detail
logs: id, detail

那为什么不干脆是一个表?或者有什么理由不去用mongodb?(事物不算,而且实现软事物并不难)
lyragosa
2015-05-28 00:45:23 +08:00
这种设计有好处有坏处

喷的人一定没遇到非常复杂的多层嵌套结构

当然你非要严格按照二范氏做他几十个表我也没办法反驳……
JoeShu
2015-05-28 02:03:35 +08:00
以前做过类似的设计,不过稍有区别,就是要把索引字段需要抽取出来,不然性能会很差
优点很多:
1. 处理灵活,适合业务变化比较快的产品
2. 支持事物,适合对数据一致性要求高的场景
3. 支持行级锁,因为直到2.4版本,mongodb还只支持db级别的锁
4. mysql要比mongodb稳定的多,各种问题都有很成熟的解决方案
5. 很多云服务和运维服务不支持nosql。
6. 性能问题,mongodb对内存和磁盘空间的消耗实在是很大,尤其内存小于热数据的时候。

这种方案是综合了mysql和nosql的优点, 是一种很好的解决方案
monkeylyf
2015-05-28 07:17:46 +08:00
也用过类似的schema设计 用postgres来实现 主要是为了灵活的应付需求改变 减少修改schema导致的db migration 稳定后的release的时候会把json里的数据拉出来当成col存
decken
2015-05-28 08:59:36 +08:00
postgrep大法好
guotie
2015-05-28 09:19:36 +08:00
挺好。

我们在每个表里增加一个attr的字段,json结构,专门用来扩展。
CharlesL
2015-05-28 10:11:32 +08:00
看V2的大侠们讨论,果然长知识.
kenken
2015-05-28 10:25:32 +08:00
@est 1M的json,那就得分离存储了,特殊情况需要特殊设计。但是1m这情况我这么多年也没遇到,这情况一般人会放到单纯的mysql吗?
est
2015-05-28 10:33:25 +08:00
@kenken 你永远无法预测用户会给你传什么东西上来。。。。reddit 他们就遇到这个事情了。好像是用户头像哪里?他们忘记做检测了。结果有个用户头像大小是2G。
kenken
2015-05-28 10:36:47 +08:00
@fy 是mysql 5.6
kenken
2015-05-28 10:37:54 +08:00
@zongwan 这个对游戏确实不熟悉,一直在做电商。 像合服我听过,但不了解是怎么操作。
kenken
2015-05-28 10:40:37 +08:00
@JoeShu 对,我们是电商,对事务要求极其严格,而且行级锁性能是非常高的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/194047

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX