我的数据集如下所示:
Task-1, Priority1, (SkillA, SkillB)
Task-2, Priority2, (SkillA)
Task-3, Priority3, (SkillB, SkillC)
呼叫应用程序(客户端)将发送技能列表 - 比如说(SkillD,SkillA)。
查询:
设计考虑因素:
我已经考虑过使用binarySearch(比较器)或Map(技能,SortedSettasks(任务))的简单List,但寻找更多的想法。
为这种数据集设计数据结构的最佳方法是什么,它允许复杂的键和与该键关联的已排序任务组。
答案 0 :(得分:1)
我会考虑MongoDB。其中一行的数据对象听起来非常适合JSON格式,而不是表格中的行。原因是因为技能组列表可能会增长。在经典关系数据库中,您可以通过三种方式之一解决此问题,一直在扩展列以确保您拥有最大数量的技能组列(这非常难看),有一个单独的表,其中包含与ID匹配的技能组分组,或将技能组存储为逗号分隔的技能组列表。每一个都很糟糕。在MongoDB中,您可以拥有数组字段,并且数组中的项是可索引的。
因此,考虑到这一点,我会对MongoDB进行所有查询并让它处理所有问题。我会创建一个这样的POJO:
public class TaskPriority {
String taskId;
String priorityId;
List<String> skillIds;
}
在MongoDB中,您可以索引所有这些字段以快速搜索和查询。
如果您必须在本地缓存这些项并从Java数据结构执行这些查询,那么您可以做的是为您关心TaskPriority对象的引用实例的项创建索引。
例如,为了跟踪其TaskPriority的技能组合,可以使用以下地图:
Map<String, TaskPriority> skillSetToTaskPriority;
您可以对taskId和priorityId重复此操作。您必须管理这些索引。这通常是您的数据库的工作。
最后,您可以拥有将taskId映射到Task对象的POJO和表(或MongodDB集合),该对象包含您可能希望拥有的有关该任务的任何元数据。优先级和SkillSet也是如此。这就是4个MongoDB集合......任务,优先级,技能集和任务优先级。
答案 1 :(得分:1)