处理哈希数据的最佳算法

时间:2017-08-02 19:08:37

标签: javascript php python algorithm math

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

"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 个答案:

答案 0 :(得分:1)

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

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

  3. 不要更改原始数据,而是添加索引dicts,其中键为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,然后获取原始数据。 它很快。