2016-03-28 2 views
0

各子が独自のETSテーブルを作成するスーパーバイザを作成しました。基本的には、私が50人以上の子供を始めようとしているときを除いて、すべてのことがうまく見えます。DBテーブルが多すぎます。スーパーバイザが子を作成し、すべての子が1つのETSテーブルを使用するように実装したいと思います。子供がETSテーブルに書きたい場合でも、グローバルETSテーブルに書き込みます。スーパーバイザと1つのETSテーブルを共有するN個の子を作成する

私はGoogleに試みましたが、何の助けも見つかりませんでした。

ありがとうございました!

答えて

0

あなたが実際に何をしたいかによって異なりますが、スーパーバイザーがテーブルを作成して、使用する子供にpid /名前を渡すことができます。プロセス間で共有する場合は、テーブルにパブリックアクセス権を使用させる必要があります。

保存したいデータの読み書きを担当するサーバーを作成し、管理者に残りの子と一緒にそのサーバーを管理させます。

1

なぜ50個のETSテーブルを作成するのが悪いのですか?それはあなたの要求に依存します。これらの50のプロセスが同時にETSにアクセスする必要がある場合、それらを1つのテーブルに限定することは、一度に1つのプロセスしかテーブルに書き込むことができないため、パフォーマンスに影響を与える可能性があります。

テーブルを所有し、テーブルにデータを書き込むゲートウェイ(Nathanielの提案)の役目を果たしている単一のテーブルまたはgen_serverを作成すると、すべてのプロセスが同じデータにアクセスする必要がある場合のみ意味があります。

しかし、後者の場合、テーブルIDがスーパーバイザからその子に渡されると、gen_server中央に頼るのではなく、子プロセスが読み書きを行うことができますテーブル(もちろんパフォーマンスがあなたの要件でない限り)。