Java 通讯簿搜索-在处理大数据时应使用哪种数据结构
我想设计带有以下字段的通讯簿 UID名称PhoneNumber1 PhoneNumber2 UID用于唯一地标识名称。假设我想保存200万条记录。 现在我想构造如何保存这些记录,以便可以通过姓名和电话号码进行搜索 我应该使用哪种数据结构和搜索技术Java 通讯簿搜索-在处理大数据时应使用哪种数据结构,java,design-patterns,database-design,Java,Design Patterns,Database Design,我想设计带有以下字段的通讯簿 UID名称PhoneNumber1 PhoneNumber2 UID用于唯一地标识名称。假设我想保存200万条记录。 现在我想构造如何保存这些记录,以便可以通过姓名和电话号码进行搜索 我应该使用哪种数据结构和搜索技术 提前谢谢如果您的名字有冲突怎么办? 约翰·史密斯可能会回来多次。 似乎您最好只使用PhoneNumber1/PhoneNumber2作为搜索变量 我建议a这样做,因为它允许O1进行搜索,并且有200万条记录,你不希望永远找不到人。如果你的名字有冲突怎么
提前谢谢如果您的名字有冲突怎么办? 约翰·史密斯可能会回来多次。 似乎您最好只使用PhoneNumber1/PhoneNumber2作为搜索变量
我建议a这样做,因为它允许O1进行搜索,并且有200万条记录,你不希望永远找不到人。如果你的名字有冲突怎么办? 约翰·史密斯可能会回来多次。 似乎您最好只使用PhoneNumber1/PhoneNumber2作为搜索变量
我建议a来做这件事,因为它允许O1进行搜索,并且有200万条记录,你不希望永远找不到人。将其标准化为以下表格和列: 名称:UID,Name 电话号码:UID、SN、PhoneNumber 序列号,所以是1或2,将来也是3到1000 您执行的每个搜索都应该运行两个查询,每个表一个查询,或者两个表上一个联合查询
SELECT UID, Name
FROM Names
WHERE Name = '%<search string>%'
SELECT UID, PhoneNumber
FROM PhoneNumbers
WHERE PhoneNumber = '%<search string>%'
ORDER BY UID # so that multiple matches with same user appear together
可以用Java组合两个查询的结果。将其标准化为以下表格和列: 名称:UID,Name 电话号码:UID、SN、PhoneNumber 序列号,所以是1或2,将来也是3到1000 您执行的每个搜索都应该运行两个查询,每个表一个查询,或者两个表上一个联合查询
SELECT UID, Name
FROM Names
WHERE Name = '%<search string>%'
SELECT UID, PhoneNumber
FROM PhoneNumbers
WHERE PhoneNumber = '%<search string>%'
ORDER BY UID # so that multiple matches with same user appear together
可以用Java将两个查询的结果结合起来。为什么不设计一个类地址簿呢 在数据库中创建带有相应字段的AddressBook表。uuid将是主键。持久化AddressBook对象 点名搜索
select * from AddressBook where name ="something";
按电话号码搜索
select * from AddressBook where phoneNumber1="something";
你为什么不设计一个班级通讯录呢 在数据库中创建带有相应字段的AddressBook表。uuid将是主键。持久化AddressBook对象 点名搜索
select * from AddressBook where name ="something";
按电话号码搜索
select * from AddressBook where phoneNumber1="something";
这取决于您的主要目标: 如果完成了需求开发,并且您决定使用关系数据模型进行数据存储和检索,那么@aneroid answer是一个选项。 记住: 使用WHERE Name='%%'将迫使RDMS引擎付出相当大的成本。您可以基于RDBMS在大规模数据中寻找高级技术。 如果性能是主要目标,则可以选择使用。 如果可以跳过RDBMS,那么java lang数据结构
将派上用场,看看它们在时间复杂度方面是伪造的。这取决于你的主要目标: 如果完成了需求开发,并且您决定使用关系数据模型进行数据存储和检索,那么@aneroid answer是一个选项。 记住: 使用WHERE Name='%%'将迫使RDMS引擎付出相当大的成本。您可以基于RDBMS在大规模数据中寻找高级技术。 如果性能是主要目标,则可以选择使用。 如果可以跳过RDBMS,那么java lang数据结构 将派上用场,看看它们在时间复杂性方面是伪造的