zanjibar
@zanjibar (tadashi nagao)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

カラム数2万 レコード数 10億 を扱える表形式ファイルフォーマットは需要あるでしょうか?

意見を求めています。

sqliteDB では扱えないカラム数2万 レコード数 10億の表形式ファイルフォーマットの開発の手助けをしています。IoTの分野で需要があるのは確かですが、他にも需要がありそうな気がしています。どんな分野で需要がありそうでしょうか?

実装されている機能

  • 10万カラムまで対応、レコードは、1兆行ぐらいいけるみたいです。
  • 検索が超高速です。O(logN) です。10億行でも100億行でもほとんど差がないです。
  • すべてのカラムにインデックスが付きます。
  • 検索は、原則単独のカラムのみですが、クライアントにメモリの余裕があれば、複数項目の and 検索もできます。or もできますが、レコード数が多いと非現実的です。
  • ファイルフォーマットなので、クライアントのみで使えます。ファイルマウントすれば使えます。S3にデータをおいて、ファイルマウントすれば使えます。
  • 複数のファイルを組み合わせて(union) が簡単にできます。ビッグデータでも可能なので、便利です。組み合わせは、ファイルマウントされていれば、なんでもよいです。ローカルでもクラウド(複数種類)でもできます。
  • アーカイブデータを扱うのが基本なのですが、1日単位ぐらいも対応できます。
  • 組み合わせるときに、データ・タイプの整合性をとることが少しできます。起算点のことなる整数化した時刻データの起算点合わせや、メートルとヤードポンドの調整など
  • JOIN相当(outer join) ができます。

理論的な構成

表形式のデータはあたえられると、列(カラムごと)に並べ替えることができます。列ごとに並べ替えの順番(自然数)が列の値に付与されます。順番(自然数)は、連続して、最大値はレコード数を超えません。この順番(自然数)をインデックスとみたてると、検索、並べ替え、抽出の操作の大部分が、順番(自然数)だけで可能になり、簡素化されます。順番(自然数)を論理的にも、記憶媒体的にも扱い易く、メモリを消費せず、高速に処理が可能です。また、複数のデータを組み合わせることも、順番(自然数)を使うと同様にメモリを消費せずかつ高速に処理可能です。

3

クラウドで使うなら、Hadoop関連(Hive、amazon athnaなど)を使えばよいので、使うシーンはなさそうです。
sqliteと書かれているので、組み込みとかローカルPCなら用途があるかもしれません(それほどの量のデータを使いたいかどうかによります)

0Like

2万カラムですべてインデックス付きはかなり大変な気がしますが、Hadoop で扱えるのでしょうか?

0Like

Hadoopの考え方は、たまにしか使わないDBアクセスのためにインデックス作成に時間をかけるくらいなら、(インデックス作成の時にも必要になる)全レコードのアクセスで支配的になるIO時間を並列化で高速化してしまおうということなので、しばしばランダムアクセスする用途ならzanjibarさんの開発中の仕組みが役に立つかもしれません。
ビッグデータ解析では、しばしば特定の列に関する全レコードのスキャン(フィルター+aggregation)の用途が多かったので、Hadoopみたいな仕組みが丁度良かったのだと思います。
あと、単なる検索(文字列の完全一致)の場合には、KVS(nonSQL)とか、インメモリDB(高いですが SAP hanaみたいなもの)が速いので、それに対する優位性があれば用途が広がると思います。

1Like

Your answer might help someone💌