オブジェクトストレージの検索を安価で高速にする方法
![](https://image.news.livedoor.com/newsimage/stf/4/a/4a3b2_88_9f33c78a4e64a7615b5f0ad047fb1425.png)
オブジェクトストレージ用の高速検索エンジンサービス「turbopuffer」を開発したサイモン・ホルプ・エスキルセン氏が、どのようにオブジェクトストレージの検索を安価かつ高速に行えるようにしたのかについてブログに投稿しました。
turbopuffer: fast search on object storage
https://turbopuffer.com/blog/turbopuffer
![](https://image.news.livedoor.com/newsimage/stf/1/1/11e1e_88_513c0b41dedd41de615fd5d403114ff3.png)
エスキルセン氏は現代のインフラスタックでよく使用されているデータベース5つを下の表にまとめました。ワークロードごとに適切な専用データベースを使用するのは運用の負荷が高いため、特定のワークロードで問題が多発するようになるまではPostgresやMySQLなどのリレーショナルデータベースを使っておけば良いとのこと。
カテゴリ技術読込レイテンシ書込レイテンシストレージユースケースキャッシュRedis, Memcached<500µs<500µsメモリパフォーマンス重視RDBMySQL, Postgres<1ms<1msメモリ+SSDSOT・トランザクション・CRUD検索ElasticSearch, Vector DBs<100ms<1sメモリ+SSDレコメンデーション・検索・フィード・RAG保存BigQuery, Snowflake>1s>1sオブジェクトストレージレポート・データ分析ストリーミングKafka, Warpstream<100ms<100msHDD/オブジェクトストレージログ・システム間データ移動・リアルタイム分析
エスキルセン氏には2022年にReadwise Readerというリーダーアプリの開発を手伝っている時、インフラコストが高すぎてRDBからメモリ内データベースに移行できず、記事のリコメンデーションやセマンティック検索の実装を見送った経験があります。2022年当時、企業グレードのベクトルデータベースはメモリ内ストレージを使用しており、1GBあたり2ドル(約323円)のコストがかかっていました。
オブジェクトストレージが普及したり、NVMe SSDが安価かつ高速になったりするなどの技術の進化により、全てのデータをメモリ内ストレージに保存する代わりにディスク媒体と混合で使用することでコストを大きく低下させることが可能になったとのこと。
データを3つのSSDに3重に保存し、平均ストレージ使用率が50%の場合、コストは1GBあたり0.6ドル(約97円)まで低下します。その他、アクセス頻度の低いデータについてAWS S3やGCSなど1GBあたり約0.02ドル(約3円)で使用できるオブジェクトストレージを活用したり、1GBあたり0.1ドル(約1.6円)で使用できるSSDキャッシュを活用したりすることでメモリよりも最大で100分の1のコストでデータを保存できます。
こうした状況を踏まえ、エスキルセン氏はコスト効率と高性能を組み合わせた新しい検索アプローチとして「turbopuffer」を開発しました。
![](https://image.news.livedoor.com/newsimage/stf/4/1/415b7_88_0da3aefd6b51cbc809af3ce75e28c821.png)
従来の検索エンジンはRDBの複製ディスクアーキテクチャを使用して構築されており、レイテンシが低く、更新やトランザクションの同時実行性能が非常に高くなっています。しかし、検索エンジンには書込レイテンシが低くても良かったり、トランザクションが不要だったりという特徴があり、RDBを使用することで不要な機能にコストを払ってしまっているとエスキルセン氏は指摘。
よくアクセスされるデータをSSDキャッシュに配置し、普段は利用されないデータを安価なオブジェクトストレージに保存することでほとんどの検索クエリへの応答速度を維持したままコストを大幅に減少させることが可能です。一部のクエリにおいて数百ミリ秒という長い遅延が発生するというデメリットも併せ持っているものの、遅延の影響よりもコストの節約量の方が価値が大きいとのこと。
![](https://image.news.livedoor.com/newsimage/stf/f/5/f5d6f_88_53f0a1d07fbd4ae89fe175a97d1f8e3b.png)
クエリの処理時間のイメージはこんな感じ。オブジェクトストレージからデータの読み込みが必要になるコールドクエリにおいても、ラウンドトリップ回数を動的に調整することでできる限り高速に処理できるよう工夫していると述べられています。
![](https://image.news.livedoor.com/newsimage/stf/a/b/abf15_88_40b343ea3915d59c74582aed05d836fc.png)
turbopufferは開発段階ではあるものの既にAIコードエディタのCursorへの採用実績があるとのこと。初期顧客として使用したい場合は問い合わせするよう述べられています。