2017-08-02 21 views
0

問題是關於處理數據的最佳方法。
假設我們有這樣的鍵 - >值數據:
處理哈希數據的最佳算法

"[email protected]": { "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 = "[email protected]": {//all data} 
$b = "John" : {//all data including email} 
$c = "developer":{//all other data} 
// and so on 

但我的用戶年紀越來越大隨着時間的推移,所以我每次更新用戶的年齡我的主對象中的數據發生變化。
所以,我的問題是,使用任何編程語言實現這種邏輯的最佳方式是什麼?


一些注意事項:
它必須使用編程語言不接觸MySQL或任何其他數據庫來完成。

+0

我很困惑。原來的問題是redis,現在你只需要任何語言的內存中的任何數量的映射,而不是數據庫?這裏肯定有一些限制,否則你會如何建設性地進步? – roganjosh

+0

@roganjosh我根據你的評論改變了我的問題。 – Grynets

回答

1
  1. 我認爲用戶的使用,而不是ageyear of birth可能是在這種情況下更好。

  2. 如果您使用數據庫,則可以使用index。 如果不是,我想你可以自己創建index。 一個簡單的指數策略是:

不要更改原始數據,但添加索引類型的字典,其中鍵是index和值email。 象Python中,您可以添加兩個指數,nameyearofbirth

name = {"John": ["[email protected]", "[email protected]", "[email protected]"], 
     "Mike": ["[email protected]", ...], 
     #...etc} 
yearofbirth = {"1981":["[email protected]", "[email protected]"], 
       #...etc} 

通過這種方式,可以通過nameyearofbirth搜索得到email,然後獲取原始數據。 而且速度很快。

+0

非常好的解決方案。謝謝 :) – Grynets