› 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 · Sep 2, 2010 · 8290 views
    This topic created in 5873 days ago, the information mentioned may be changed or developed.
    rubyonrails的i18n很容易处理好页面的多国语言问题,但在数据存储上,比如mysql里,该如何设计呢?
    25 replies  •  1970-01-01 08:00:00 +08:00
    darcy
        1
    darcy  
       Sep 2, 2010
    用户产生的内容你还要将其多语言化么?貌似没必要这么做。
    Los
        2
    Los  
    OP
       Sep 2, 2010
    @darcy 是内容需要多国语言展现。
    minghua
        3
    minghua  
       Sep 2, 2010 via iPad
    @Los 如果是Rails就简单多了,http://ruby-i18n.org/wiki 看model translate 部分。自己设计数据库也不难,就是需要注意翻译字段灵活性和效率的问题。

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

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

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

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

    如果用redis 2.0,用Hash的方式实现更简单。
    Los
        23
    Los  
    OP
       Sep 3, 2010
    @minghua redis 似乎也是不错的选择,但假如需要提供搜索的话,redis不知道支持如何?
    minghua
        24
    minghua  
       Sep 3, 2010
    @Los redis 搜索不如 mongodb, 但应该有全文索引的办法,这快没怎么用过,你搜搜看。
    Los
        25
    Los  
    OP
       Sep 3, 2010
    @minghua thanks
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   905 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:40 · PVG 02:40 · LAX 11:40 · JFK 14:40
    ♥ Do have faith in what you're doing.