あなたは両方とも良い点を指摘しており、混乱を招く可能性があります. 例では
apple -> colour weight price variety
"red" 100 40 "Cox"
apple はキー値で、列は 4 つのデータ項目すべてを含むデータです。説明によると、4 つのデータ項目すべてが 1 つのオブジェクトとしてまとめて格納され、アプリケーションによって解析されて、必要な値だけが取得されるようです。したがって、IO の観点からは、オブジェクト全体を読み取る必要があります。IMHOこれは本質的に列ベースではなく行(またはオブジェクト)ベースです。
列ベースのストレージは、完全なテーブル スキャン (DW) の極端な圧縮と IO の削減を提供するため、ウェアハウジングで一般的に使用されるようになりましたが、すべての列をプルする必要がある場合に OLTP の IO が増加するという犠牲が伴います (* を選択)。ほとんどのクエリはすべての列を必要とするわけではありません。また、圧縮により、わずか数列の完全なテーブル スキャンで IO を大幅に削減できます。例を挙げましょう
apple -> colour weight price variety
"red" 100 40 "Cox"
grape -> colour weight price variety
"red" 100 40 "Cox"
2 つの異なる果物がありますが、どちらも色 = 赤です。色を重量、価格、種類とは別のディスク ページ (ブロック) に保存し、保存されるのは色だけである場合、ページを圧縮すると、多くの重複排除により極端な圧縮を実現できます。1 ページに 100 行 (仮定上) を格納する代わりに、10,000 色を格納できます。すべてを赤色で読み取ると、何千もの IO ではなく 1 つの IO になる可能性があります。これは、ウェアハウジングと分析には非常に適していますが、行全体を更新する必要がある場合は OLTP には適していません。更新 (または挿入) には数百の IO が必要になる可能性があります。
何かが欠けていない限り、これを柱状ベースとは呼びませんが、オブジェクト ベースと呼びます。オブジェクトがディスク上でどのように配置されているかはまだ明らかではありません。複数のオブジェクトが同じディスク ページに配置されていますか? 同じメタデータを持つオブジェクトを確実に組み合わせる方法はありますか? オブジェクト自体に保存するメタデータや xml など、ある果物に別の果物とは異なるデータが含まれる場合、特定の一致する果物の種類を一緒に保存して効率を高める方法はありますか?
ラリー