我创建了一个主管,启动子项,每个孩子都在创建自己的ETS表。基本上,一切看起来都很好,除非我试图启动超过50个孩子,它说太多的数据库表,这也是一个糟糕的设计。我想以这样一种方式实现,即主管创建子项,并且所有子项都使用一个ETS表。即使孩子想要写入ETS表,它也会写入全局ETS表。
我试图谷歌但找不到任何帮助。
谢谢!
答案 0 :(得分:1)
为什么你说创建50个ETS表是一个糟糕的设计?这一切都取决于您的要求。如果这50个进程需要同时访问ETS,那么将它们限制在一个表中可能会影响性能,因为一次只能有一个进程写入表。
创建一个表或拥有该表的gen_server
并充当将数据写入表的网关(由Nathaniel提出)只有在所有这些进程都需要访问相同数据时才有意义
但是在后一种情况下,如果将表id从主管传递给其子节点,那么它将更有效,这样子进程可以并行读/写而不是依赖于中心gen_server
来代理对表格的要求(除非当然不是你的要求)。
答案 1 :(得分:0)
这取决于您的实际需求,但您可以让主管创建表并将pid / name传递给要使用的子项。如果要在进程之间共享表,则需要让表使用公共权限。
或者制作一个负责读取和写入您要存储的数据的服务器,并让主管与其他孩子一起管理该服务器。