我们正在设计一个rails 4.1应用程序,它将被部署到小盒子中,很可能是基于arm(例如CuBox-i2eX)的,或者如果arm不切断它的话,一些更便宜的Intel NUC。
将有一些其他服务运行在同一个盒子上,将获得大部分流量,rails应用程序主要用于管理目的,大部分时间只有最小流量,但应处理一些人的大量工作流(输入数据)。总体数据量在大多数尺度上都很小。
目前看来,sqlite3似乎是这类应用程序的理想选择,但托管数据描述了学生、教师等类似ldap的模式,由许多具有多个值(或结构)的属性组成,这使得它非常适合postgresql的array
和h-store
数据类型,在sqlite3中实现起来有些麻烦。
我知道rails的serialize
,但我至少需要查询其中一些多值列,让我在两个选项之间:
咬紧牙关,跟着postgresql走,希望它不会咬住这个小盒子。
为所有类似数组的属性创建不同的表/模型,例如EmailAddress
和TelephoneNumber
是EAV的变体,但使用rails的单表继承来创建EmailAddress < StringValue
和TelephoneNumber < StringValue
并在需要时将它们与多态关联粘在一起,以便StringValue
可以属于多个模型。
所以我的问题是:当我不需要完整的PostgreSQL安装来提高性能的时候,同时使用STI和多态关联有什么缺点吗。
最佳答案
我是有偏见的老派,但我个人会把数据正常化这为您提供了将来生成以前从未考虑过的查询的证据当您不需要担心安全问题(即您希望向某些应用程序/用户隐藏一些数据)或者我不希望进行太多模式更改时,我倾向于使用sqlite(ALTER TABLE在SQLite中受到限制)。
我曾经试图在android平板电脑上安装postgresql,但最终失败了,因为它试图使用不可用的内核设施(与共享内存相关)。如果你想尝试这个方向,请确保你可以让它在你的环境中运行。