Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通讯簿搜索-在处理大数据时应使用哪种数据结构_Java_Design Patterns_Database Design - Fatal编程技术网

Java 通讯簿搜索-在处理大数据时应使用哪种数据结构

Java 通讯簿搜索-在处理大数据时应使用哪种数据结构,java,design-patterns,database-design,Java,Design Patterns,Database Design,我想设计带有以下字段的通讯簿 UID名称PhoneNumber1 PhoneNumber2 UID用于唯一地标识名称。假设我想保存200万条记录。 现在我想构造如何保存这些记录,以便可以通过姓名和电话号码进行搜索 我应该使用哪种数据结构和搜索技术 提前谢谢如果您的名字有冲突怎么办? 约翰·史密斯可能会回来多次。 似乎您最好只使用PhoneNumber1/PhoneNumber2作为搜索变量 我建议a这样做,因为它允许O1进行搜索,并且有200万条记录,你不希望永远找不到人。如果你的名字有冲突怎么

我想设计带有以下字段的通讯簿

UID名称PhoneNumber1 PhoneNumber2

UID用于唯一地标识名称。假设我想保存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数据结构 将派上用场,看看它们在时间复杂性方面是伪造的