2017-02-27 1 views
2

私は推奨エンジンを開発中です。私は全体の類似性マトリックスを記憶しておくことはできないと思う。 10,000点の類似点を計算したところ、4,000万点を超えています。私はそれらをバイナリファイルに保存し、160 MBになります。推奨エンジンにどのようにデータを保存する必要がありますか?

うわー! 問題は約20万点のアイテムがあるということです。 複数のグループにグループ化して各グループの類似性マトリックスを作成しても、それらをある時点でメモリにロードする必要があります。 しかし、それは多くのメモリを消費します。

これらのデータを処理するにはどうしますか?

エンジンを入力に適度に高速に応答させながら、それらを格納してメモリにロードする方法を教えてください。

答えて

2

memory mappingを使用してデータにアクセスできます。こうすることで、データを読み書きするページだけがメモリにロードされるという違いで、ディスク上のデータを1つの大きなメモリ領域(およびメモリにアクセスするのと同じように)で表示できます。

データを多少グループ化できる場合は、データにアクセスする際に、より小さな部分だけをメモリに読み込む必要があります。

浮動小数点数に関しては、解像度を落として16ビット整数に値を格納すれば、それもサイズの半分になります。

+0

node.jsを使用していますが、node.jsで使用できるメモリマッピングはありますか? – arslan

+1

@alim私はnode.jsについてはわかりませんが、それは可能です:http://stackoverflow.com/a/23748621/5708620 - しかし、その答えにも述べられているように、おそらくその量のデータにアクセスするほうがよいでしょうスクリプトの代わりにいくつかのC++(または他の)コードから(そしておそらくすべてのスレッドのためにメモリにいくつかの部分を保持する - すべての要求に対してメモリマッピングを開いたり閉じたりすることはあまり役に立ちません)。 –

+0

ありがとう、私はそれを試してみる:) – arslan

関連する問題