最近 InfinDB を使い始めましたが、今のところうまく機能しています。バルク ロードに cipimport ツールを使用すると、数百万行が数秒で挿入されます。ただし、数千行を挿入する必要がある特定の状況があり、insert ステートメントを使用する方が、データの生成方法の性質上、プログラム的にはるかに合理的です。ただし、これを実行しようとすると、挿入速度がかなり遅いようです。1 秒あたり約 30 行を挿入しています (各行はかなり小さいです。行ごとに約 5 列、それぞれが varchar(10) 型です)。何かを誤って構成および/またはインストールしたか、またはinsertステートメントを使用して予想される速度ですか? 私のコンピューターには 16 GB の RAM と 520 mb/s の書き込み速度の SSD があり、MyISAM または Innodb を使用して、insert ステートメントを使用して毎秒数千行を挿入できます。
4 に答える
INSERT INTO VALUES(),(),...
INSERT
個別のクエリよりもはるかに高速です。
私は InfiniDB のアーキテクトです
INSERT INTO を実行していますか、それとも一連の個別の INSERT コマンドを実行していますか? 何千行も処理しているとのことですが、INSERT INTO でそれを行うことはできますか?
cpimport は高速読み込み用に最適化されており、INSERT INTO および LOAD DATA よりも cpimport を使用することをお勧めする理由です。これにはいくつかの理由があります。データベースの性質とその下にあるアーキテクチャによるものです。そうは言っても、人々が INSERT INTO と LOAD DATA を使い慣れているので、それらを使用できるようにしたいと考えており、cpimport で得られるものと同様の高速なパフォーマンスを求めていることを認識しています。これは現在作業中で、6 月末 / 7 月初めにリリースされる InfiniDB の 4.6 リリースに含まれる予定です。これらの操作は、未処理のコミットがない場合に高速モードで操作するように最適化されます。
InfiniDB は列指向のデータベースですが、MyISAM と Innodb は行指向です。基本的にこれが意味することは、データがそれぞれ列と行でグループ化されたハードディスクに保存されるということです。したがって、列指向のデータベースに新しい行を挿入したい場合は、ハードディスクの異なる場所にある各列に値を挿入する必要があります。ただし、1 つの列からすべてのデータを取得する (たとえば、AVG() を呼び出す) 方が、行指向の dbms よりもはるかに高速です。
アイデアを得るために、列指向データベースに関するウィキペディアの記事を読むことをお勧めします: http://en.wikipedia.org/wiki/Column-directional_DBMS