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