我在一個使用mapReduce算法的工程中工作,所以我從Erlang的大數據文件中構建了一個ets表,我想同時處理它。 該表結果非常大,我想知道是否有辦法將一個大表拆分爲幾個較小的表,以便我可以同時使用mapReduce算法搜索表 ,有沒有什麼辦法可以拆分一張大桌子放入小桌子? Thnx。erlang中的拆分e3
1
A
回答
1
您可以同時搜索一個ETS表中沒有任何需要分割已經表:
http://www.erlang.org/doc/man/ets.html#new_2_read_concurrency
如果表很大,我建議你使用一個很好的匹配模式,以幫助減少搜索大小:http://www.erlang.org/doc/man/ets.html#select-2
1
我曾在一個內部網應用程序中,我不得不在RAM大部分時間保存的東西。我創建了一個穩定的caching library
,它幫助我提取了ETS
機制。在這個圖書館中,我創建了工作人員gen_servers
,他們的工作是創建,擁有和展示ETS
表的方法。我給他們命名爲:cache1
和cache2
。如果其中一方出現問題,這兩家公司將以不必要的方式相互轉讓所有權。獲取應用程序:http://www.4shared.com/zip/z_VgKLpa/cache-10.html 只需將其解壓縮並使用Emake file
重新編譯它,然後將其放入您的Erlang Lib directory
要了解它的工作原理,請參閱shell實例。
F:\programming work\cache-1.0>erl -pa ebin Eshell V5.9 (abort with ^G) 1> application:start(cache). ok 2> rd(student,{name,age,sex}). student 3> cache_server:new(student,set,2). ok 4> cache_server:write(#student{name = "Muzaaya Joshua", sex = "Male",age = (2012 - 1987) }). ok 5> cache_server:write(student,[#student{name = "Joe",sex = "Male"}, #student{name = "Mike",sex = "Male"}]). ok 6> cache_server:read({student,"Muzaaya Joshua"}). [#student{name = "Muzaaya Joshua",age = 25,sex = "Male"}] 7> cache_server:read({student,"Joe"}). [#student{name = "Joe",age = undefined,sex = "Male"}] 8> cache_server:get_tables(). [{cache1,[student]},{cache2,[]}] 9> rd(class,{class,no_of_students}). class 10> cache_server:get_tables(). [{cache1,[student]},{cache2,[]}] 11> cache_server:new(class,set,2). ok 12> cache_server:get_tables(). [{cache1,[student]},{cache2,[class]}] 13> cache_server:write(class,[ #class{class = "Primary " ++ integer_to_list(N), no_of_students = random:uniform(50)} || N <- lists:seq(1,7)]) . ok 14> cache_server:read({class,"Primary 6"}). [#class{class = "Primary 6",no_of_students = 30}] 15> cache_server:delete({class,"Primary 2"}). ok 16> cache_server:get_cache_state(). [{server_state,cache1,1,[student]}, {server_state,cache2,1,[class]}] 17> rd(food,{name,type,value}). food 18> cache_server:new(food,set,2). ok 19> cache_server:write(food,[#food{name = "Orange", type = "fruit",value = "Vitamin C"}]). ok 20> cache_server:get_cache_state(). [{server_state,cache1,2,[food,student]}, {server_state,cache2,1,[class]}] 21>現在,爲了解
ets:give_away/3
的重要性,我們來看看
cache1
或
cache2
崩潰時會發生什麼情況。請記住,當前服務器狀態(顯示當前表的所有者)是:
21> cache_server:get_cache_state(). [{server_state,cache1,2,[food,student]}, {server_state,cache2,1,[class]}] 22>讓我崩潰
cache1
,我們看到了。
22> gen_server:cast(cache1,stop). ok Cache Server: cache2 has taken over table: food from server: cache1 23> Cache Server: cache2 has taken over table: student from server: cache1 23> cache_server:get_cache_state(). [{server_state,cache1,0,[]}, {server_state,cache2,3,[student,food,class]}] 24>而且另一個:
24> gen_server:cast(cache2,stop). ok Cache Server: cache1 has taken over table: student from server: cache2 25> Cache Server: cache1 has taken over table: food from server: cache2 25> Cache Server: cache1 has taken over table: class from server: cache2 25> cache_server:get_cache_state(). [{server_state,cache1,3,[class,food,student]}, {server_state,cache2,0,[]}] 26>那就是它!您可以使用源代碼中的概念自行創建。該庫創建的
ETS
表爲
public
和
named
,因此您可以使用
ETS
函數直接訪問它們。
相關問題
- 1. ERlANG - 將列表拆分成子列表
- 2. ERLANG - 將列表拆分成子列表
- 3. 將列表拆分成2個等於erlang的列表
- 4. 拆分中的R
- 5. 蟒蛇URL解碼%E3
- 6. 在html/css中「硬」字拆分/拆分
- 7. 將Erlang列表X拆分爲所有X的子列表的列表
- 8. Erlang分析器/分析器?
- 9. Erlang - 代碼分析
- 10. R中的拆分列
- 11. UNIX中的文件拆分
- 12. 拆分R中的列
- 13. vb.net中的拆分功能
- 14. 拆分URL中的數據?
- 15. XSLT中的拆分座標
- 16. JavaScript中的拆分方法?
- 17. SQL Server中的拆分表
- 18. Pygame中的拆分圖像
- 19. jmeter中的拆分功能
- 20. mysql中的拆分功能
- 21. erlang中的分佈式算法模擬
- 22. Erlang中的遞歸列表分析
- 23. Erlang中分層狀態機的實現
- 24. 拆分
- 25. 拆分
- 26. 拆分中的R列分爲兩個
- 27. 拆分已拆分窗格(MFC)
- 28. 拆分文本與拆分功能
- 29. Python的拆分EXEC
- 30. Groovy的拆分CSV