>问题是关于处理数据的最佳方式。
假设我们有这样的键>值数据:
"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或任何其他数据库。
-
我认为在这种情况下使用用户的
year of birth
而不是age
可能会更好。 -
如果您使用的是数据库,则可以使用
index
。 如果没有,我认为您可以自己创建index
。 一个简单的指数策略是:
不要更改原始数据,而是在键index
和值email
的位置添加索引字典。 就像在python中一样,您可以添加两个索引,name
和yearofbirth
:
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}
这样,您可以按name
或yearofbirth
进行搜索以获取email
,然后获取原始数据。 而且速度很快。