任意のリレーショナル データベース テーブルの内容を表現および格納するために使用できる JVM データ構造 (Java/Scala) を設計したいと考えています。データ構造は高速で (gc を多用しすぎず、キャッシュに適していない)、メモリ効率が高い必要があるため、より大きなテーブルを RAM に収めることができます。
メモリ効率の良い解決策の 1 つは、各列をプリミティブ配列に個別に格納することですが、同じ行のアイテムが一緒に格納されないため、キャッシュの使いやすさが心配です。N 列の行では、列の幅に関係なく、N キャッシュ ミスが発生します。
もう 1 つの解決策は、各要素がフィールドを表し、取得時に正しい型にキャストされるオブジェクト配列に各行を格納することですが、これには数値型をボックス化された形式で格納する必要があるため、メモリ効率があまり良くありません。また、おそらくキャッシュ効率も良くありません。
もう 1 つの解決策は、実際のデータベースが行をシリアル化するのと同じ方法で、各行のデータをバイト配列にレイアウトし、必要なバイト数だけを使用することです。これはキャッシュにやさしくメモリ効率が良いですが、アクセスごとのシリアライゼーション/デシリアライゼーションのコストが気になります。
最善の方法は何ですか?