erlang中的分裂ets

erlang中的分裂ets,erlang,ets,Erlang,Ets,我有一门关于mapReduce算法的课程,所以我从一个大数据文件在Erlang中构建了一个ets表,我想同时处理它。 这个表非常大,我想知道是否有办法将一个大表拆分为几个小表,以便我可以同时搜索该表 使用mapReduce算法,有没有办法将一个大表拆分为子表??? Thnx.您可以同时搜索ETS表格,而无需拆分表格: 如果表很大,我建议您使用一个好的匹配模式来帮助减少搜索大小:我曾开发过一个内部网应用程序,在该应用程序中,我大部分时间都必须将内容保存在RAM中。我创建了一个稳定的缓存库,它帮助

我有一门关于mapReduce算法的课程,所以我从一个大数据文件在Erlang中构建了一个ets表,我想同时处理它。 这个表非常大,我想知道是否有办法将一个大表拆分为几个小表,以便我可以同时搜索该表 使用mapReduce算法,有没有办法将一个大表拆分为子表???
Thnx.

您可以同时搜索ETS表格,而无需拆分表格:


如果表很大,我建议您使用一个好的匹配模式来帮助减少搜索大小:

我曾开发过一个内部网应用程序,在该应用程序中,我大部分时间都必须将内容保存在RAM中。我创建了一个稳定的
缓存库
,它帮助我抽象了
ETS
机制。在这个库中,我创建了一个worker
gen_服务器,其工作是为
ETS
表创建、拥有和公开方法。我给它们命名:
cache1
cache2
。这两个公司一直以冗余的方式相互转让所有权,以防其中一个出现问题。获取应用程序: 只需解压缩它并使用
Emake文件
重新编译它,然后将它放入您的
Erlang Lib目录


查看它是如何工作的,下面是一个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> 让我崩溃
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> 22>gen_服务器:强制转换(缓存1,停止)。 好啊 缓存服务器:cache2已从服务器:cache1接管表:食物 23> 缓存服务器:缓存2已从服务器:缓存1接管表:学生 23>缓存服务器:获取缓存状态()。 [{server_state,cache1,0,[]}, {服务器状态,缓存2,3[学生、食物、班级]}] 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> 24>gen_服务器:强制转换(缓存2,停止)。 好啊 缓存服务器:缓存1已从服务器:缓存2接管表:学生 25> 缓存服务器:cache1已从服务器:cache2接管表:食物 25> 缓存服务器:cache1已从服务器:cache2接管表:类 25>缓存服务器:获取缓存状态()。 [{服务器状态,缓存1,3,[班级,食物,学生]}, {server_state,cache2,0,[]}] 26> 就这样!您可以使用源代码中的概念自己创建一些东西。该库创建的
ETS
表是
public
named
,因此您可以使用
ETS
函数直接访问它们

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>