我想使用类和集群设计以下内容,但寻找最合乎逻辑且最有效的解决方案。
我,基本上有 3种类型的用户(非常不同)所以我将它们设计为扩展User抽象类的类。
我的应用程序强烈基于GeoLoc。因此,为了在响应时间速度(执行扫描等)时提供最佳用户体验,我在两种方法之间犹豫不决:
为每个UserType设置与国家/地区数量一样多的群集,然后选择定位相关群集。
_______________________
| User (abstract class) |
|_______________________|
^
|
|
___________________ ___________________ ___________________
| UserType1 (class) | | UserType2 (class) | | UserType3 (class) |
|___________________| |___________________| |___________________|
| | |
| | |
US-Cluster_1 US-Cluster_2 US-Cluster_3
FR-Cluster_1 FR-Cluster_2 FR-Cluster_3
UK-Cluster_1 UK-Cluster_2 UK-Cluster_3
为每个UserType设置countryField,然后选择使用它过滤的用户。
_______________________
| User (abstract class) |
|_______________________|
^
|
|
___________________ ___________________ ___________________
| UserType1 (class) | | UserType2 (class) | | UserType3 (class) |
| | | | | |
| - countryField | | - countryField | | - countryField |
|___________________| |___________________| |___________________|
然后Select * from UserType1 where countryField = "US"
什么是最有效和最合乎逻辑的方式?
谢谢。
答案 0 :(得分:1)
部分取决于您的记录计数和所需的响应时间。根据我们的经验,将数据分成群集大大改善了查询时间,但代价是更复杂(管理群集,不同查询等)。我们在每个集群中放置了几百万条记录,并添加了一些自制索引,以便快速查询。
您确实应该生成一些测试数据并将其存储为测试查询性能与您的要求的两种方式。没有2个用例是一样的。
答案 1 :(得分:0)
如果群集内的记录数量会以百万计增长,那么您将再次检测群集内的记录,因为根据此线程[1],当我们从群集中专门检索记录时,orient db不能使用索引。
因此,将来当集群内的记录数量增长时,如果要创建另一个字段(例如townField)的索引以加快数据检索时间,您将无法做到这一点。因此,您将留下的唯一解决方案是再次按城镇群集。
因此我建议你使用第二种方法并有效地使用索引或尝试基于类继承的解决方案,因为东方数据库社区在此线程中建议[1]。
参考[1] https://github.com/orientechnologies/orientdb/issues/4606