カラム数2万 レコード数 10億 を扱える表形式ファイルフォーマットは需要あるでしょうか?
意見を求めています。
sqliteDB では扱えないカラム数2万 レコード数 10億の表形式ファイルフォーマットの開発の手助けをしています。IoTの分野で需要があるのは確かですが、他にも需要がありそうな気がしています。どんな分野で需要がありそうでしょうか?
実装されている機能
- 10万カラムまで対応、レコードは、1兆行ぐらいいけるみたいです。
- 検索が超高速です。O(logN) です。10億行でも100億行でもほとんど差がないです。
- すべてのカラムにインデックスが付きます。
- 検索は、原則単独のカラムのみですが、クライアントにメモリの余裕があれば、複数項目の and 検索もできます。or もできますが、レコード数が多いと非現実的です。
- ファイルフォーマットなので、クライアントのみで使えます。ファイルマウントすれば使えます。S3にデータをおいて、ファイルマウントすれば使えます。
- 複数のファイルを組み合わせて(union) が簡単にできます。ビッグデータでも可能なので、便利です。組み合わせは、ファイルマウントされていれば、なんでもよいです。ローカルでもクラウド(複数種類)でもできます。
- アーカイブデータを扱うのが基本なのですが、1日単位ぐらいも対応できます。
- 組み合わせるときに、データ・タイプの整合性をとることが少しできます。起算点のことなる整数化した時刻データの起算点合わせや、メートルとヤードポンドの調整など
- JOIN相当(outer join) ができます。
理論的な構成
表形式のデータはあたえられると、列(カラムごと)に並べ替えることができます。列ごとに並べ替えの順番(自然数)が列の値に付与されます。順番(自然数)は、連続して、最大値はレコード数を超えません。この順番(自然数)をインデックスとみたてると、検索、並べ替え、抽出の操作の大部分が、順番(自然数)だけで可能になり、簡素化されます。順番(自然数)を論理的にも、記憶媒体的にも扱い易く、メモリを消費せず、高速に処理が可能です。また、複数のデータを組み合わせることも、順番(自然数)を使うと同様にメモリを消費せずかつ高速に処理可能です。
クラウドで使うなら、Hadoop関連(Hive、amazon athnaなど)を使えばよいので、使うシーンはなさそうです。
sqliteと書かれているので、組み込みとかローカルPCなら用途があるかもしれません(それほどの量のデータを使いたいかどうかによります)
Hadoopの考え方は、たまにしか使わないDBアクセスのためにインデックス作成に時間をかけるくらいなら、(インデックス作成の時にも必要になる)全レコードのアクセスで支配的になるIO時間を並列化で高速化してしまおうということなので、しばしばランダムアクセスする用途ならzanjibarさんの開発中の仕組みが役に立つかもしれません。
ビッグデータ解析では、しばしば特定の列に関する全レコードのスキャン(フィルター+aggregation)の用途が多かったので、Hadoopみたいな仕組みが丁度良かったのだと思います。
あと、単なる検索(文字列の完全一致)の場合には、KVS(nonSQL)とか、インメモリDB(高いですが SAP hanaみたいなもの)が速いので、それに対する優位性があれば用途が広がると思います。