V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Los
V2EX  ›  MySQL

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

  •  
  •   Los · 2010-09-02 21:47:43 +08:00 · 6988 次点击
    这是一个创建于 5214 天前的主题,其中的信息可能已经有所发展或是发生改变。
    rubyonrails的i18n很容易处理好页面的多国语言问题,但在数据存储上,比如mysql里,该如何设计呢?
    25 条回复    1970-01-01 08:00:00 +08:00
    darcy
        1
    darcy  
       2010-09-02 21:53:30 +08:00
    用户产生的内容你还要将其多语言化么?貌似没必要这么做。
    Los
        2
    Los  
    OP
       2010-09-02 21:55:23 +08:00
    @darcy 是内容需要多国语言展现。
    minghua
        3
    minghua  
       2010-09-02 22:05:38 +08:00 via iPad
    @Los 如果是Rails就简单多了,http://ruby-i18n.org/wiki 看model translate 部分。自己设计数据库也不难,就是需要注意翻译字段灵活性和效率的问题。

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

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

    acticles:123:title:en => 'hello'
    acticles:123:body:en => 'world'

    用户每次浏览不会把几十种语言都去出来吧?

    如果用redis 2.0,用Hash的方式实现更简单。
    Los
        23
    Los  
    OP
       2010-09-03 17:47:22 +08:00
    @minghua redis 似乎也是不错的选择,但假如需要提供搜索的话,redis不知道支持如何?
    minghua
        24
    minghua  
       2010-09-03 18:05:26 +08:00
    @Los redis 搜索不如 mongodb, 但应该有全文索引的办法,这快没怎么用过,你搜搜看。
    Los
        25
    Los  
    OP
       2010-09-03 18:14:59 +08:00
    @minghua thanks
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5550 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:40 · PVG 10:40 · LAX 18:40 · JFK 21:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.