多国语言webapp,数据库该如何设计?

2010-09-02 21:47:43 +08:00
 Los
rubyonrails的i18n很容易处理好页面的多国语言问题,但在数据存储上,比如mysql里,该如何设计呢?
6986 次点击
所在节点    MySQL
25 条回复
darcy
2010-09-02 21:53:30 +08:00
用户产生的内容你还要将其多语言化么?貌似没必要这么做。
Los
2010-09-02 21:55:23 +08:00
@darcy 是内容需要多国语言展现。
minghua
2010-09-02 22:05:38 +08:00
@Los 如果是Rails就简单多了,http://ruby-i18n.org/wiki 看model translate 部分。自己设计数据库也不难,就是需要注意翻译字段灵活性和效率的问题。

http://github.com/joshmh/globalize2 基本符合你的需求。
Los
2010-09-02 22:16:19 +08:00
@minghua thanks,之前并没有仔细关注过这个内容,感谢分享,我去看看。
marshluca
2010-09-02 23:35:30 +08:00
可以试试mongodb,用rails做多语言处理也是非常方便的
Los
2010-09-02 23:39:56 +08:00
试了一下globalize3,发觉跟我之前设计的表结构基本一样,当初这样设计对性能上的问题比较纠结。
minghua
2010-09-03 07:04:09 +08:00
@Los 表结构基本一样,性能可能不一样哦,看它里面具体实现咋杨了。
Los
2010-09-03 15:04:13 +08:00
@marshluca 谢谢,mongodb确实是一个很不错的解决方案,但这个项目我还没有足够的勇气将它迁移到mongodb上面。
Los
2010-09-03 15:13:33 +08:00
@minghua 恩,这样的设计担忧性能在数据库上出现问题,因为涉及30多种语言,300多万条数据,这样的设计会导致单表里超过1亿条数据的。
marshluca
2010-09-03 15:30:55 +08:00
对mongodb比较满意的地方就是对新入库的数据无需重新index。
我这边有一个rails api,基于mongodb,里面目前支撑了5种语言的数据。
这个API连着很多个Android , iPhone app
Los
2010-09-03 15:57:29 +08:00
@marshluca good!对于迁移到mongodb,对我而言最大的问题unique id的处理,要维持原本在mysql下的递增风格,使用mongodb必须自己生成递增式的id,之前有尝试的几个方案测试中对mongodb的插入性能都有很大影响。
minghua
2010-09-03 15:59:28 +08:00
@Los 那只能把翻译字段序列化成哈希来保存了,hash的key就是语言类别,这样数据量小很多。

@marshluca 好像其他数据库也不需要reindex ?在你制定index 列时
Los
2010-09-03 16:00:12 +08:00
晕了,竟然重复发了几条相同的回复。
minghua
2010-09-03 16:02:12 +08:00
@Los 维护原来的unique id 的确是个麻烦事,不过抛弃原来的unique id也不是太大的问题。 不过迁移过程要把原来的数据全部维护好。
marshluca
2010-09-03 16:03:50 +08:00
@minghua 呵呵 是的
因为之前的数据是基于mysql,数量比较大,每天需要sphinx对新数据进行定时索引
Los
2010-09-03 16:16:23 +08:00
@minghua :)对于一个习惯将递增数字id展现在url里的家伙,一下子转到mongodb的hash式id,这个会让人觉得url够丑的了。
minghua
2010-09-03 16:28:18 +08:00
@Los 是有这么个障碍。
marshluca
2010-09-03 16:38:25 +08:00
@Los 目前delete api出来了么? 你是怎么把重复的回复删掉的?
Los
2010-09-03 16:42:29 +08:00
@minghua 对于将翻译字段序列化成哈希来保存,最大的顾虑是读取时对IO的折磨,大段的文字,30种语言,每次都要全部读取出来,对于IO的压力够呛的了。另一个想法是利用mongodb只存储翻译字段的内容,但还没有进行尝试过。
Los
2010-09-03 16:45:03 +08:00
@marshluca ;) 不是我删掉的,估计Livid在线。

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

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

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

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

© 2021 V2EX