いくつかのトピックを読みましたが、迷っています。私はこれにかなり慣れていません。巨大な疎行列を保存したいのですが、いくつかのアイデアがありますが、それらの中から選択できます。ここに私のニーズがあります:
- 約の隣接行列。5000 万の頂点。
- 1 つの頂点あたりの近隣の最大数 - 約。10000。
- 1 つの頂点あたりの平均隣接数 - 約。200-300。
- 高速行クエリ - ベクトルはこの行列で乗算されます。
- エッジを追加するための O(1) の複雑さ。
- ほとんどの場合、エッジは削除されません。
- v に隣接する頂点の列挙 - 可能な限り高速。
- 移植性 - あるコンピューターから別のコンピューターにベースを転送する方法が必要です。
だから、ここに私の考えがあります:
- ペア (行、列) を持つ巨大なテーブル。非常に単純ですが、頂点の列挙は少なくとも O(log N) になります。ここで、N - テーブルのサイズです。と思うくらい遅いです。また、索引付けする必要があります。すべての RDBMS は何に適していますか。
- 膨大な量のリスト: 頂点ごとに 1 つのリスト。非常に高速な列挙ですが、これを保存するには多くのリソースが必要ではないでしょうか? また、この場合にどの DBMS を使用すればよいかわかりません。おそらく NoSql でしょうか。
- 巨大なテーブル (行 | 列のセット)。上記の 2 つの組み合わせ。任意のセットをサポートする RDBMS があるかどうかはわかりません。何でも知ってますか?ここでNoSqlが役立つのではないでしょうか?
- 隣接リストのコレクション。どの RDBMS もそれに適しており、複雑さの面でのコストは適切ですが、1 つの頂点に対して DB への複数の要求によってそれらが殺される可能性があります。
- HDF5 - I/O のために遅くなると思います。
- Neo4j - 私の知る限り、データを二重にリンクされたリストに保存するので、実質的に№4と同じになりますよね?
より良い決定を選択または提案するのを手伝ってください。
どこかで見積もりが間違っていたら、訂正してください。