2011-07-07 24 views
4

我目前正在构建在亚马逊云中运行的体系结构(一些web服务器w/php5.3,负载平衡,PostgreSQL)的应用程序。我的(PHP5)应用程序的一个主要特点是,所有内容(前端)必须可以翻译成各种语言,因此将会有很多字符串,它们由“标记”表示,必须被翻译。在云应用程序中存储翻译的位置?

我的问题是:你会在哪里存储这些翻译?

  • 将翻译存储在本地(网络服务器)磁盘上的文件中?
  • 将翻译文件存储在中央存储中?
  • 将译文存储在数据库中?
  • 其他地方?

附加信息:不管在哪里翻译将被存储 - 将有一些缓存(Redis,+模板缓存),所以文件/数据库将不会在每个呈现的页面上被查询。

上述每个解决方案都有优点和缺点,经过我们团队的大量讨论后,我们没有找到我们都很满意的解决方案。

我们的一些想法:

  • 文件更易于维护(通过覆盖文件更新翻译)
  • DB-表是更灵活(围绕打造翻译数据一个不错的转换接口)
  • DB-Tables只存储一次;所以这比许多文件在云中的便宜,我认为(我们支付存储和数据传输)
  • 集中存储的文件可能是一个瓶颈

那么,什么是你的oppinion?

问候, 罗伯特

+0

你总是可以建立一个更新文件的界面。将文件存储在网络服务器(而不是EBS)上是否有任何费用?它可能有一个类似于代码部署的机制。 – Sukumar

+2

这将有助于了解您的应用程序在何处以及如何存储未翻译的文本。它们是否是数据库中的动物内容(那么在那里存储翻译似乎也是合理的),还是存储在(源文件)文件中的静态内容,还是完全不同的东西? – BurninLeo

+0

未翻译的文本存储在数据库和文件中。用于表格翻译的DB,用于模板的文件。因此,我们可以将我们的翻译存储在数据库或文件中,或两者兼而有之 - 我们团队中永无止境的讨论...... – S38

回答

3

你应该这样做既 - 保持主存储在数据库中的语言数据,这将可以很容易地构建管理应用程序在其周围,并建立本地文件(或其他地方的存储方式)进行实际执行。不断从数据库查询语言数据是浪费时间,特别是因为语言数据通常非常静态。

如果你想确保可扩展性,你应该建立在至少三个层次:

  1. 当地(tmpfsSQLiteRedis,文件...);和

  2. 云状(例如Memcached);和

  3. 主存储(例如,

    1. 静态或实际静态数据:数据库服务器)

    上层存储数据的决定应始终从那里数据被以最有效的方式获取基于(=语言,配置,皮肤...)应该保存在本地,以保证对数据的最快访问。您将不得不想出一种方法来在多个服务器之间构建和同步更新的数据(如果您正在使用本地缓存,则保存为本地缓存)。方法包括:rsyncunison,Redis的复制,版本控制系统......

  4. 动态的,但缓存数据应该生活在云状缓存,因为假设是,它往往是重建,因此可以利用的性能收益来自共享构建的数据。

  5. 数据库应当你无法避免它(如过时的高速缓存)

我不会特别担心IO接入成本只访问。扩展数据库服务器或必须重新构建项目中期将比IO更昂贵。如果你担心这个问题,找一个主要依靠内存的本地存储解决方案,你可以完全避免磁盘读取,并享受另一个性能增益。

相关问题