处理哈希数据的最佳算法



>问题是关于处理数据的最佳方式。
假设我们有这样的键>值数据:

"user@gmail.com": { "name": "John",
"age": 20,
"job": "developer",
"favourite_food": ['taco', 'steak']
//...etc
}
//...etc

对于具有关键"电子邮件"的用户来说,有很多数据,例如一百万。 通常我必须通过用户的电子邮件搜索用户。
但是今天我的老板来找我,说他想按用户的名字搜索用户,当然还有通过电子邮件搜索的可能性。前几天他说他希望我的程序实现按年龄搜索等等。
我的第一个想法是迭代数据,例如,这个php代码:

foreach($email as $data){
foreach($data as $k => $v){
if($v == 'search value'){
return $email;
}
}
}

但是这种解决方案不适用于大量数据。
我的第二个想法是遍历第一个数据,并为每封电子邮件创建自己的表,使其看起来像这样:

$a = "user@gmail.com": {//all data}
$b = "John" : {//all data including email}
$c = "developer":{//all other data}
// and so on

但是我的用户随着时间的推移而变老,所以我必须在每次主对象中的数据发生变化时更新用户年龄。
所以,我的问题是,使用任何编程语言实现这种逻辑的最佳方法是什么?


一些注意事项:
它必须通过使用编程语言来完成,而不接触MySQL或任何其他数据库。

  1. 我认为在这种情况下使用用户的year of birth而不是age可能会更好。

  2. 如果您使用的是数据库,则可以使用index。 如果没有,我认为您可以自己创建index。 一个简单的指数策略是:

不要更改原始数据,而是在键index和值email的位置添加索引字典。 就像在python中一样,您可以添加两个索引,nameyearofbirth

name = {"John": ["xx@xx.com", "cc@cc.com", "aa@c.com"],
"Mike": ["aa@aa.com", ...],
#...etc}
yearofbirth = {"1981":["xx@xx.com", "cc@cc.com"],
#...etc}

这样,您可以按nameyearofbirth进行搜索以获取email,然后获取原始数据。 而且速度很快。

最新更新