2016-11-01 6 views
0

int[][]配列のコピーをverticleに渡すにはどうすればよいですか?Vertx:初期データをその上にあるverticleに渡す

私はServerVerticleからデプロイされています。これは、5-10 ServiceVerticleです。

それぞれServiceVerticleは、同じ共有データ構造 - Map<Integer, Short[]>を使用する必要があります。これは100-2000Mbです。

問題 - 配列として値を持つLocalマップを作成できません。

int[][]のコピーをそれぞれのServiceVerticleに渡して、データのコピーを5~10個保存する唯一のインメモリソリューションです。

P.S.このデータ構造にはできるだけ早く検索する必要があるため、Hazelcast IMapのようなクラスタ全体のソリューションは嫌いです。

答えて

1

LocalMapで使用できるタイプはあまりありませんが、Bufferを使用できます。バッファは最適化されたバイト配列であり、ユースケースに素早く適応させることができます。 Bufferを使用すると、メモリ表現がコンパクトになり、メモリを節約でき、操作も高速になります。

2D平面から1D線への変換だけを記述する必要があります。あなたがバッファにそれを変換する場合は

int[][] data = new int[] { 
    new int[] {1, 2, 3}, 
    new int[] {4, 5, 6}, 
}; 

:たとえば、あなたが次の配列(×3 2)を持っていると言う

Buffer.buffer() 
    .appendInt(1).appendInt(2).appendInt(3) 
    .appendInt(4).appendInt(5).appendInt(6); 

(あなたが後でただ、これはただで、バイト表現を使用することができますそれがどのように機能するかを説明する)。

今、あなたが行うことによって任意のxyを参照することができます。

int getInt(int x, int y) { 
    // transform from 2D to 1D 
    int pos = y * LENGTH + x; 
    // Where LENGTH is the the example: 3 

    // For safety assert on length 
    if (pos > buffer.length()) throw new ArrayIndexOutOfBoundsException(); 
    // TODO: assert on min, max (x, y) 

    return buffer.getInt(pos); 
} 
関連する問題