问题是关于处理数据的最佳方式。
我们假设我们有这样的关键 - >价值数据:
"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或任何其他数据库来完成。
答案 0 :(得分:1)
我认为在这种情况下使用year of birth
用户而不是age
可能会更好。
如果您使用的是数据库,则可以使用index
。
如果没有,我认为您可以自己创建index
。
一个简单的索引策略是:
不要更改原始数据,而是添加索引dicts,其中键为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
,然后获取原始数据。
它很快。