【发布时间】:2011-05-27 22:44:51
【问题描述】:
假设您计划创建一个在 GAE/Java 上运行的社交网络,其中每个用户都有一组属性(即年龄、当前城镇、兴趣)。
替代方案 1:经典方法 - user_id 和每个属性作为“行”
entity property_1 property_2 property_3
------ ---------- ---------- -----------------
bob missing NY [football, books]
tom 34 missing [books, horses]
备选方案 2:实体属性值 (EAV)
entity attribute value
------ --------- -----
bob town NY
bob interests [football, books]
tom age 34
tom interests [books, horses]
您认为每个选项都有哪些优点/缺点?我主要担心的是:
- 对多标准搜索有何影响(即“给我 45 岁以下居住在纽约并喜欢书籍的用户”)
- 它可能对 GAE/J 产生什么影响? (即索引、数据存储大小...)
- 如果要检索“喜欢书籍的用户”,如何为具有多个值(例如“兴趣”)的属性建模?
我认为第二种选择更灵活,可能更容易实现,但我想知道其他有经验的开发人员是怎么想的。
谢谢。
【问题讨论】:
-
Expando 是要走的路,但你必须深入了解如何在 java 中做到这一点。
-
感谢@Gabi,但问题并不在于某些属性不是强制性的。问题在于在 1. 多标准搜索 2. GAE/J 影响 3. 具有多个值的属性方面哪个选项更好。
标签: google-app-engine google-cloud-datastore data-modeling