(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-07
(45)【発行日】2023-11-15
(54)【発明の名称】エンコーディングされたデータに対する条件付きトランスコーダ及びトランスコーディング方法
(51)【国際特許分類】
H03M 7/42 20060101AFI20231108BHJP
H03M 7/30 20060101ALI20231108BHJP
【FI】
H03M7/42
H03M7/30 Z
(21)【出願番号】P 2020073662
(22)【出願日】2020-04-16
【審査請求日】2023-02-28
(32)【優先日】2019-04-16
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-12-09
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-12-09
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-03-16
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】390019839
【氏名又は名称】三星電子株式会社
【氏名又は名称原語表記】Samsung Electronics Co.,Ltd.
【住所又は居所原語表記】129,Samsung-ro,Yeongtong-gu,Suwon-si,Gyeonggi-do,Republic of Korea
(74)【代理人】
【識別番号】110000051
【氏名又は名称】弁理士法人共生国際特許事務所
(72)【発明者】
【氏名】キ, ヤン ソク
(72)【発明者】
【氏名】イ, ホ ビン
【審査官】北村 智彦
(56)【参考文献】
【文献】特開2007-096800(JP,A)
【文献】特開2017-028372(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H03M 3/00-9/00
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
入力エンコーディングデータを格納するバッファと、
入力辞書から出力辞書にマッピングするインデックスマッパーと、
前記入力エンコーディングデータ
と、前記入力辞書
と、前記入力辞書から前記出力辞書へのマップ
と、に応答する
ように、ルール評価器にて修正された現在のエンコーディングデータ
を、格納する現在のエンコーディングバッファと、
前の入力エンコーディングデータ
と、前記入力辞書
と、前記入力辞書から前記出力辞書へのマップ
と、に応答する
ように修正された前のエンコーディングデータ
を、格納する前のエンコーディングバッファと、
前記現在のエンコーディングバッファに格納された前記修正された現在のエンコーディングデータ、前記前のエンコーディングバッファに格納された前記修正された前のエンコーディングデータ、及びトランスコーディングのルールに応答する出力ストリームを生成する
前記ルール評価器と、を備
え、
第1のエンコーディング方式を使用して前記入力エンコーディングデータで第1のチャンクを識別し、第2のエンコーディング方式を使用して前記入力エンコーディングデータで第2のチャンクを識別するストリームスプリッタを更に備え、
前記ルール評価器は、前記トランスコーディングのルールを使用して前記入力エンコーディングデータから前記修正された現在のエンコーディングデータを生成するように動作することを特徴とするトランスコーダ。
【請求項2】
前記ルール評価器は、プロセッサ、FPGA(Field Programmable Gate Array)、ASIC(Application-Specific Integrated Circuit)、GPU(Graphics Processing Unit)、及び汎用GPU(GPGPU)の中の少なくとも1つを含むことを特徴とする請求項1に記載のトランスコーダ。
【請求項3】
前記ルール評価器は、前記トランスコーディングのルールを使用して前記修正された現在のエンコーディングデータを含むように前記修正された前のエンコーディングデータを修正するように動作することを特徴とする
請求項1に記載のトランスコーダ。
【請求項4】
前記ルール評価器は、前記入力エンコーディングデータ及び前記修正された前のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更するように動作することを特徴とする
請求項3に記載のトランスコーダ。
【請求項5】
前記インデックスマッパーは、前記入力辞書の少なくとも1つの項目を前記出力辞書の「ドントケア(don’t care)」の値にマッピングするように動作することを特徴とする請求項1に記載のトランスコーダ。
【請求項6】
前記トランスコーダは、前記入力エンコーディングデータのデコーディングなしに前記入力エンコーディングデータから出力ストリームを生成するように動作することを特徴とする請求項1に記載のトランスコーダ。
【請求項7】
ストレージ装置内のデータに対するトランスコーダの動作方法であって、
トランスコーダで、ストレージ装置から入力エンコーディングデータからの第1のデータチャンクを受信する段階と、
前記第1のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、
前記ホストコンピュータの関心対象である前記第1のデータチャンクに少なくとも部分的に基づいて、前記第1のデータチャンクから第1のエンコーディングデータを生成する段階と、
前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの第2のデータチャンクを受信する段階と、
前記第2のデータチャンクが前記ホストコンピュータの関心対象ではないことを決定する段階と、
前記ホストコンピュータの関心対象ではない前記第2のデータチャンクに少なくとも部分的に基づいて、前記第2のデータチャンクから第2のエンコーディングデータを生成する段階と、
前記第1のエンコーディングデータ及び前記第2のエンコーディングデータを前記ホストコンピュータに出力する段階と、を有
し、
前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの前記第1のデータチャンクを受信する段階は、
ストリームスプリッタで前記入力エンコーディングデータを受信する段階と、
前記ストリームスプリッタによって、前記入力エンコーディングデータで、第1のエンコーディング方式を使用してエンコーディングされた前記第1のデータチャンク及び第2のエンコーディング方式を使用してエンコーディングされた前記第2のデータチャンクを識別する段階と、
前記ストリームスプリッタから提供された前記入力エンコーディングデータから前記第1のデータチャンクを受信する段階と、を含むことを特徴とする方法。
【請求項8】
前記ホストコンピュータの関心対象ではない前記第2のデータチャンクに少なくとも部分的に基づいて、前記第2のデータチャンクから第2のエンコーディングデータを生成する段階は、前記第1のエンコーディングデータ内の値を「ドントケア(don’t care)」の値に変更する段階を含むことを特徴とする
請求項7に記載の方法。
【請求項9】
前記ホストコンピュータの関心対象ではない前記第2のデータチャンクに少なくとも部分的に基づいて、前記第2のデータチャンクから第2のエンコーディングデータを生成する段階は、前記第2のエンコーディングデータを「ドントケア」の値を含む第3のエンコーディングデータに結合する段階を更に含むことを特徴とする
請求項8に記載の方法。
【請求項10】
前記ホストコンピュータの関心対象ではない前記第2のデータチャンクに少なくとも部分的に基づいて、前記第2のデータチャンクから第2のエンコーディングデータを生成する段階は、
少なくとも第1のエンコーディング方式を変更する段階と、
前記第2のデータチャンク及び前記第3のエンコーディングデータのいずれかを第2のエンコーディング方式に変換する段階と、を含むことを特徴とする
請求項9に記載の方法。
【請求項11】
前記ホストコンピュータの関心対象である前記第1のデータチャンクに少なくとも部分的に基づいて、前記第1のデータチャンクから第1のエンコーディングデータを生成する段階は、前記第1のエンコーディングデータを第3のエンコーディングデータに結合する段階を含むことを特徴とする
請求項7に記載の方法。
【請求項12】
前記ホストコンピュータの関心対象である前記第1のデータチャンクに少なくとも部分的に基づいて、前記第1のデータチャンクから第1のエンコーディングデータを生成する段階は、前記第1のデータチャンク及び前記第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階を更に含むことを特徴とする
請求項11に記載の方法。
【請求項13】
前記ホストコンピュータの関心対象である前記第1のデータチャンクに少なくとも部分的に基づいて、前記第1のデータチャンクから第1のエンコーディングデータを生成する段階は、トランスコーディングルールに少なくとも部分的に基づいて、前記第1のデータチャンクから前記第1のエンコーディングデータを生成する段階を含み、
前記ホストコンピュータの関心対象ではない前記第2のデータチャンクに少なくとも部分的に基づいて、前記第2のデータチャンクから第2のエンコーディングデータを生成する段階は、トランスコーディングルールに少なくとも部分的に基づいて、前記第2のデータチャンクから前記第2のエンコーディングデータを生成する段階を含むことを特徴とする
請求項7に記載の方法。
【請求項14】
前記ストレージ装置から入力辞書を受信する段階と、
前記ホストコンピュータの関心データ及び前記ホストコンピュータの無関心データに少なくとも部分的に基づいて、前記入力辞書を出力辞書にマッピングする段階と、
前記出力辞書を前記ホストコンピュータに出力する段階と、を更に含むことを特徴とする
請求項7に記載の方法。
【請求項15】
前記トランスコーダは、前記入力エンコーディングデータのデコーディングなしに前記入力エンコーディングデータから前記第1のエンコーディングデータ及び前記第2のエンコーディングデータを生成するように動作することを特徴とする
請求項7に記載の方法。
【請求項16】
命令語を格納したコンピュータ読み取り可能な非一時的記録媒体を含む物品であって、
マシンによって前記命令語が実行される方法は、
トランスコーダで、ストレージ装置から入力エンコーディングデータからの第1のデータチャンクを受信する段階と、
前記第1のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、
前記ホストコンピュータの関心対象である前記第1のデータチャンクに少なくとも部分的に基づいて、前記第1のデータチャンクから第1のエンコーディングデータを生成する段階と、
前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの第2のデータチャンクを受信する段階と、
前記第2のデータチャンクが前記ホストコンピュータの関心対象ではないことを決定する段階と、
前記ホストコンピュータの関心対象ではない前記第2のデータチャンクに少なくとも部分的に基づいて、前記第2のデータチャンクから第2のエンコーディングデータを生成する段階と、
前記第1のエンコーディングデータ及び前記第2のエンコーディングデータを前記ホストコンピュータに出力する段階と、を有
し、
前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの前記第1のデータチャンクを受信する段階は、
ストリームスプリッタで前記入力エンコーディングデータを受信する段階と、
前記ストリームスプリッタによって、前記入力エンコーディングデータで、第1のエンコーディング方式を使用してエンコーディングされた前記第1のデータチャンク及び第2のエンコーディング方式を使用してエンコーディングされた前記第2のデータチャンクを識別する段階と、
前記ストリームスプリッタから提供された前記入力エンコーディングデータから前記第1のデータチャンクを受信する段階と、を含むことを特徴とする物品。
【請求項17】
前記ホストコンピュータの関心対象ではない前記第2のデータチャンクに少なくとも部分的に基づいて、前記第2のデータチャンクから第2のエンコーディングデータを生成する段階は、前記第1のエンコーディングデータ内の値を「ドントケア(don’t care)」の値に変更する段階を含むことを特徴とする
請求項16に記載の物品。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般的に、ストレージ装置に関し、より詳細には、ストレージ装置内のデータに対するトランスコーディングに関する。
【背景技術】
【0002】
ソリッドステートドライブ(Solid State Drive:以下、SSD)などのストレージ装置は、比較的多量のデータを格納することができる。ホストプロセッサは、SSDからデータを要請してそのデータに対する動作を遂行する。データをホストプロセッサに伝送するには、ホストプロセッサとSSDとを連結する特定のアーキテクチャに基づいて、比較的相当の時間が必要である。例えば、ホストプロセッサとSSDとが4レーンの第3世代PCIe(Peripheral Component Interconnect Express)を使用して連結される場合、SSDとホストプロセッサとの間に伝送され得る最大のデータ量は、毎秒約4GBである。
【0003】
ホストに伝送されるデータの量を減らし、カラムフォーマット(columnar format)の利点を活用する必要性が台頭する。
【先行技術文献】
【特許文献】
【0004】
【文献】米国特許第5918225号明細書
【文献】米国特許第7966343号明細書
【文献】米国特許第8032499号明細書
【文献】米国特許第8159374号明細書
【文献】米国特許第8170095号明細書
【文献】米国特許第8626725号明細書
【文献】米国特許第8762387号明細書
【文献】米国特許第8930798号明細書
【文献】米国特許出願公開第2012/0194361号明細書
【文献】米国特許出願公開第2013/0060780号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明は、上記従来技術に鑑みてなされたものであって、本発明の目的は、ストレージ装置とホストとの間のデータ伝送の速度や効率を高めるトランスコーダ及びトランスコーディング方法を提供することにある。
【課題を解決するための手段】
【0006】
上記目的を達成するためになされた本発明の一態様によるトランスコーダは、入力エンコーディングデータを格納するバッファと、入力辞書から出力辞書にマッピングするインデックスマッパーと、前記入力エンコーディングデータと、前記入力辞書と、前記入力辞書から前記出力辞書へのマップと、に応答するように、ルール評価器にて修正された現在のエンコーディングデータを、格納する現在のエンコーディングバッファと、前の入力エンコーディングデータと、前記入力辞書と、前記入力辞書から前記出力辞書へのマップと、に応答するように修正された前のエンコーディングデータを、格納する前のエンコーディングバッファと、前記現在のエンコーディングバッファに格納された前記修正された現在のエンコーディングデータ、前記前のエンコーディングバッファに格納された前記修正された前のエンコーディングデータ、及びトランスコーディングのルールに応答する出力ストリームを生成する前記ルール評価器と、を備え、第1のエンコーディング方式を使用して前記入力エンコーディングデータで第1のチャンクを識別し、第2のエンコーディング方式を使用して前記入力エンコーディングデータで第2のチャンクを識別するストリームスプリッタを更に備え、前記ルール評価器は、前記トランスコーディングのルールを使用して前記入力エンコーディングデータから前記修正された現在のエンコーディングデータを生成するように動作することを特徴とする。
【0007】
上記目的を達成するためになされた本発明の一態様によるストレージ装置内のデータに対するトランスコーダの動作方法は、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第1のデータチャンクを受信する段階と、前記第1のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、前記ホストコンピュータの関心対象である前記第1のデータチャンクに少なくとも部分的に基づいて、前記第1のデータチャンクから第1のエンコーディングデータを生成する段階と、前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの第2のデータチャンクを受信する段階と、前記第2のデータチャンクが前記ホストコンピュータの関心対象ではないことを決定する段階と、前記ホストコンピュータの関心対象ではない前記第2のデータチャンクに少なくとも部分的に基づいて、前記第2のデータチャンクから第2のエンコーディングデータを生成する段階と、前記第1のエンコーディングデータ及び前記第2のエンコーディングデータを前記ホストコンピュータに出力する段階と、を有し、前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの前記第1のデータチャンクを受信する段階は、ストリームスプリッタで前記入力エンコーディングデータを受信する段階と、前記ストリームスプリッタによって、前記入力エンコーディングデータで、第1のエンコーディング方式を使用してエンコーディングされた前記第1のデータチャンク及び第2のエンコーディング方式を使用してエンコーディングされた前記第2のデータチャンクを識別する段階と、前記ストリームスプリッタから提供された前記入力エンコーディングデータから前記第1のデータチャンクを受信する段階と、を含むことを特徴とする。
【0008】
上記目的を達成するためになされた本発明の一態様による命令語を格納したコンピュータ読み取り可能な非一時的記録媒体を含む物品において、マシンによって前記命令語が実行される方法は、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第1のデータチャンクを受信する段階と、前記第1のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、前記ホストコンピュータの関心対象である前記第1のデータチャンクに少なくとも部分的に基づいて、前記第1のデータチャンクから第1のエンコーディングデータを生成する段階と、前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの第2のデータチャンクを受信する段階と、前記第2のデータチャンクが前記ホストコンピュータの関心対象ではないことを決定する段階と、前記ホストコンピュータの関心対象ではない前記第2のデータチャンクに少なくとも部分的に基づいて、前記第2のデータチャンクから第2のエンコーディングデータを生成する段階と、前記第1のエンコーディングデータ及び前記第2のエンコーディングデータを前記ホストコンピュータに出力する段階と、を有し、前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの前記第1のデータチャンクを受信する段階は、ストリームスプリッタで前記入力エンコーディングデータを受信する段階と、前記ストリームスプリッタによって、前記入力エンコーディングデータで、第1のエンコーディング方式を使用してエンコーディングされた前記第1のデータチャンク及び第2のエンコーディング方式を使用してエンコーディングされた前記第2のデータチャンクを識別する段階と、前記ストリームスプリッタから提供された前記入力エンコーディングデータから前記第1のデータチャンクを受信する段階と、を含むことを特徴とする。
【発明の効果】
【0009】
本発明のトランスコーダによれば、ストレージ装置とホスト装置とは、相互に不必要なトランザクションを最小化して、データ伝送の速度及び性能を向上させることができる。
【図面の簡単な説明】
【0010】
【
図1】本発明の一実施形態によるエンコーディングデータのトランスコーディングをサポートするソリッドステートドライブ(Solid State Drive:SSD)を含むシステムを示す図である。
【
図3】他のアプローチを使用して同一のデータを伝達する
図1のストレージ装置及びプロセッサを示す図である。
【
図4】本発明の一実施形態によるトランスコーディングされたデータを交換する
図1のストレージ装置及び
図1のプロセッサを示す図である。
【
図5】
図1のストレージ装置の詳細を示す図である。
【
図6】
図4のトランスコーダの詳細を示す図である。
【
図7】入力ストリームの一部(又は全部)である入力エンコーディングデータをチャンクに分割する
図6のストリームスプリッタを示す図である。
【
図8】入力辞書を出力辞書にマッピングする
図6のインデックスマッパーを示す図である。
【
図9】カラムフォーマットで格納されたファイルの一例を示す図である。
【
図10】カラムフォーマットで格納されたデータに対するトランスコーディングを実施する
図1のストレージ装置を示す図である。
【
図11】カラムフォーマットで格納されたデータに対するトランスコーディングを実施する
図10のカラムチャンクプロセッサを示す図である。
【
図12A】本発明の一実施形態によるデータをトランスコーディングする
図4及び
図6のトランスコーダの手順の一例のフローチャートである。
【
図12B】本発明の一実施形態によるデータをトランスコーディングする
図4及び
図6のトランスコーダの手順の一例のフローチャートである。
【
図12C】本発明の一実施形態によるデータをトランスコーディングする
図4及び
図6のトランスコーダの手順の一例のフローチャートである。
【
図13】入力エンコーディングデータをチャンクに分割する
図6のストリームスプリッタの手順の一例を示すフローチャートである。
【
図14A】本発明の一実施形態によるカラムフォーマットで格納されたデータをトランスコーディングする
図10のカラムチャンクプロセッサ及び/又は
図4及び
図6のトランスコーダの手順の一例を示すフローチャートである。
【
図14B】本発明の一実施形態によるカラムフォーマットで格納されたデータをトランスコーディングする
図10のカラムチャンクプロセッサ及び/又は
図4及び
図6のトランスコーダの手順の一例を示すフローチャートである。
【
図15】本発明の一実施形態による
図8の入力辞書を出力辞書にマッピングする
図6のインデックスマッパーの手順の一例を示すフローチャートである。
【
図16A】
図1のホストコンピュータから受信された属性を管理してトランスコーディングされたデータに対するアクセラレーション機能を潜在的に遂行する
図10のインストレージコンピュータコントローラの手順の一例を示すフローチャートである。
【
図16B】
図1のホストコンピュータから受信された属性を管理してトランスコーディングされたデータに対するアクセラレーション機能を潜在的に遂行する
図10のインストレージコンピュータコントローラの手順の一例のフローチャートである。
【発明を実施するための形態】
【0011】
以下、本発明を実施するための形態の具体例を、図面を参照しながら詳細に説明する。後述する詳細な説明では、多様な特定の詳細を本発明の技術的思想の十分な理解を助けるために提供する。しかし、この分野における通常の技術を有する者は、このような特定の詳細なしでも、本発明の技術的思想を実施することができる。別の例として、よく知られている方法、手順、構成要素(構成要素)、回路、並びにネットワークは、実施形態の側面を不必要に曖昧にしないために詳しく説明しない。
【0012】
ここで、第1、第2などのような用語を多様なエレメント(element)を説明するために使用するが、これらのエレメントは、このような用語によって限定されない。このような用語は、1つのエレメントを他の1つのエレメントから区別するためにのみ使用される。例えば、本発明の技術的思想の範囲から離れずに、第1のモジュールは、第2のモジュールとして命名され得る。同様に、第2のモジュールは、第1のモジュールとして命名され得る。
【0013】
本発明の技術的思想の説明で使用する用語は、特定の実施形態を説明するための目的でのみ使用され、本発明の技術的思想を限定するものとして意図されない。本発明の技術的思想の説明、及び請求項で使用するように、文脈上明らかに別の意味を示すものと判定されない限り、単数の表現は複数の表現も含むものとして意図される。「及び/又は」の用語は、1つ又はそれよりも多くの関連項目の任意且つ可能な全ての組み合わせを含むものとして参照される。「含む(comprise)」及び/又は「含んでいる(comprising)」の用語は、詳細な説明で使用する際に、言及する特性、整数、段階、動作、エレメント、及び/又は構成要素の存在を明示し、1つ又はそれよりも多くの他の特性、整数、段階、動作、エレメント、構成要素、及び/又はそれらのグループの存在若しくは追加を排除しない。図面の構成要素及び特性は、実際の比率に必ずしも比例するものではない。
【0014】
例えば、FPGA(Field Programmable Gate Array)、ASIC(Application-Specific Integrated Circuit)、GPU(Graphics Processing Unit)、又はその他のプロセッサをSSDの近くに置いていくつかのプロセッシング機能を使用すると、いくつかの利点がある。1番目に、SSDとニア(near)プロセッサとの間の連結は、SSDをホストプロセッサに連結するよりも、より高い帯域幅をサポートして、より速いデータ伝送を許容する。2番目に、ホストプロセッサが、データをプロセッシングする必要がないようにすることで、ホストプロセッサは、他の機能を遂行することができる一方で、ニアプロセッサは、データプロセッシングを行うことができる。
【0015】
しかし、データのニアストレージでのプロセッシングは、データの圧縮又はエンコーディングをする際に、潜在的な欠点を有する。ローデータで動作するいくつかのニアストレージプロセッサは、データに対して動作する前にデータを圧縮解除したり、デコーディングしたりする。また、ニアストレージプロセッサは、プロセッシングの結果をホストプロセッサに報告する。仮に、結果としてホストプロセッサに伝送されるデータの量がローデータの量よりも大きい場合、ニアストレージプロセッサを使用して発生する利得が失われるか、又は最悪の場合には、そもそも圧縮又はエンコーディングのデータがホストプロセッサに伝送されていた場合よりも、より多くのデータがホストプロセッサに伝送される。
【0016】
加えて、トランスコーディングは、一般的に、データに対して遂行されることがあるが、データがカラムフォーマットで格納された場合には、カラムのフォーマットを利用するためにいくつかの適応行動が遂行される。
【0017】
圧縮フォーマットのデータに対するニアデータのプロセッシングは、オフローディングの利点のうちのいくつかを無効にする。例えば、SSDとホストプロセッサとの間の連結が毎秒Xバイトの伝送をサポートする場合、データがYの圧縮率を使用して圧縮され、伝送のために選択されたデータの量がZである場合に、ニアプロセッサがホストプロセッサに伝送するデータの量は、「X×Y×Z」である。この製品が、Xの伝送速度よりも低い場合、即ち「Y×Z<1」の場合には、アクセラレーション(ニアプロセッシングによる)が有利である。
【0018】
本発明のいくつかの実施形態で、カラムストレージは、ストレージフットプリント(storage footprint)を減らすために、データのエンコーディング(例えば、RLE(Run Length Encoding))及び/又は圧縮(snappy)を使用する。圧縮ではないエンコーディングは、主要なエントロピーの減少を提供する。エンコーディング後、圧縮率は小さくなる傾向がある(約2未満)。
【0019】
本発明のいくつかの実施形態で、例えばエンコーディングアルゴリズムに少なくとも部分的に基づくエンコーディングデータのマット(mat)は、結果を膨張させずにニアプロセッシングされる(即ち、エンコーディングされたローデータがホストプロセッサに伝送される場合よりも大きい結果がホストプロセッサに伝送される)。結果を膨張させずに使用することができるエンコーディングアルゴリズムには、辞書圧縮(Dictionary compression)、接頭辞のエンコーディング(Prefix Encoding)、RLE(Run Length Encoding)、クラスターエンコーディング(Cluster Encoding)、スパースエンコーディング(Sparse Encoding)、及び間接エンコーディング(Indirect Encoding)が含まれるが、これに限定されず、本発明の実施形態と共に他のエンコーディングアルゴリズムが使用され得る。以下で説明する本発明の実施形態は、RLE及びビットパッキングに焦点を当てるが、本発明の実施形態は、他のエンコーディングアルゴリズムを含むように拡張され得る。
【0020】
トランスコーダにフィルタリングするデータを教える方法に対する付加的な疑問もある。これは、格納されるデータのサイズを減らす辞書が、データが格納される場所ではない別の場所に格納され得るという問題である。このようなストレージフォーマットの例であるカラムストア(store)は、関心のあるデータを簡単に探し出すことができる。しかし、辞書がデータから分離して格納され得るため、システムは、トランスコーディングを遂行するために、当該データだけでなく辞書を見つけることができなければならない。
【0021】
本発明の実施形態は、データを膨張させずにエンコーディングデータをフィルタリングできるようにする。フィルタリングされたデータは、変換ルールを使用してエンコーディングデータに組み込まれるエンコーディング情報を使用して再エンコーディングされ得る。本発明の実施形態におけるトランスコーダは、エンコーディングデータをフィルタリングし、ホストに伝送されるエンコーディングを修正することができる。従って、ホストが通常(plain)のデータ(圧縮アルゴリズム及び/又はエンコーディングデータの効率性に応じてエンコーディング/圧縮データに比べてかなり大きくなり得る)をプロセッシングしなければならない代わりに、ホストは、エンコーディングデータを受信してプロセッシングすることができる。ホストとストレージ装置との間の帯域幅は、データを伝送するのにかかる時間に実質的に影響を与える限界を有し得るため、エンコーディングデータを伝送することは、一般的なデータ(フィルタリングされるか、又はそうでない)を伝送することに比べてプロセッシング時間を節約することができる。
【0022】
サーキュラーバッファ(Circular buffer)は、一度にプロセッシングするのに十分なデータを格納することができる。本発明の実施形態では、サーキュラーバッファを別の構造を使用するバッファに置き換えることができる。
【0023】
インデックスマッパーは、出力ストリームと共に使用するために、入力された辞書マップから縮小された辞書マップへのマッピングを提供する。
【0024】
現在のエンコーディングバッファは、適切なエンコーディングに基づいて入力ストリームから読み取られたデータを格納する。トランスコーディングのルール、現在のエンコーディングバッファ、及び前のエンコーディングバッファの情報を使用するルール評価器は、現在のエンコーディングバッファでデータをプロセッシングする方法を決定する。現在のエンコーディングバッファのデータが、前のエンコーディングバッファのデータに結合されるか否かに応じて、ルールの評価器は、現在のエンコーディングバッファのデータに基づいて、前のエンコーディングバッファをアップデートし、前のエンコーディングバッファを出力(現在のエンコーディングバッファに前のエンコーディングバッファを切り替える)するか、又は他の動作を遂行する。例えば、トランスコーダが現在のエンコーディングバッファで「ドントケア(don’t care)」の値と見なされる値(以下で説明する)を識別した場合に、当該値は、前のエンコーディングバッファの既存の「ドントケア」の値と結合される。
【0025】
ストリームスプリッタは、異なるエンコーディングを使用してエンコーディングされた入力ストリームの異なる部分(複数のストリーム)を識別するのに使用される。単一のエンコーディング方式が使用される場合、エンコーディング方式は、パラメータ(即ち、エンコーディングのタイプ)として伝達される。そうではなく、多様なエンコーディング方式が使用される場合(即ち、エンコーディングのタイプが使用されない場合)には、入力ストリーム自体を検査して、与えられたストリームに対するエンコーディング方式が決定される。例えば、カラムストレージフォーマットのエンコーディングに格納されたデータの1番目のバイトは、エンコーディングタイプの情報を含む。RLE(Run Length Encoding)とビットパッキングとを混合する場合には、LSBが「0」である場合に「エンコーディングのタイプ=RLE」であり、LSBが「1」である場合に「エンコーディングのタイプ=ビットパッキング」である。
【0026】
多様なエンコーディング動作方式の例として、RLE及びビットパッキング(BP)を考慮する。RLEにおいて、可変の符号なし整数は、値が繰り返される頻度を示すために使用され、固定長の値が提供される。従って、例えば「00000011 00000011 00000011 00000011 00000011 00000011 00000011 00000011 00000011(十進値3の9つのコピー)」を伝送する代わりに、データは「00001001(十進値9)00000011(十進値3)」でエンコーディングされ、これは「00000011」が9回繰り返されることを示す。
【0027】
ビットパッキング(BP)で、より少ない空間を占めていると判断されたデータは、他の値に結合される。例えば、データが、一般的に8ビットを使用して格納される場合には、4つの値を格納するために総計32ビットを占める。但し、値が各々4ビットを超えないものとして知られている場合は、単一のバイトに2つの値が格納される。即ち、これがビットパッキングである。圧縮されたデータ及び非圧縮データを表すのに少しのオーバーヘッドがあるため、省空間は、説明されたものよりも若干少ないが、それでもなお有利である。
【0028】
エンコーディングは、符号なしバイトのグループの数に伴う1つ以上のバイト単位の束値(packed value)のリストを含む。グループの値の最大値の数は8であり、最大グループの数は63である。従って、例えばデータ「00000000 00000001 00000000 00000001 00000000 00000001 00000000 00000001(十進値01010101」を表すために、グループは、「00000001(グループ1)00010000(0、1)00010000(0、1)00010000(0、1)00010000(0、1)」に定義される。
【0029】
上述したように、RLE(及び他のエンコーディング)は、可変の符号なし整数を使用する。可変の符号なし整数もエンコーディングを使用する。全ての8ビットのグループで、最上位ビットは、現在のバイトが値の最後のバイトであるか、又は少なくとも1つの後続のバイトがあるかを示す。多重のバイトが使用される場合、最下位バイトが先に表され、最上位バイトは最後に表される。従って、例えば十進値「1」は「00000001」と表され、十進値「2」は「00000010」と表され、「01111111(十進値127)」まで続く。十進値「128」は「10000000 00000001」と表され、十進値「129」は「10000000 00000001」等々と表される。基本的に、2進値は、最上位のグループを除いて、7ビットの各グループで1から始まる7ビットのグループに区分される。例えば、十進値「16,384」は「10000000 10000000 00000001」と表される。
【0030】
トランスコーダを使用してエンコーディングデータをプロセッシングする際に、いくつかのデータは、「ドントケア」のデータと見なされる。即ち、遂行中の作業に価値がないいくつかのデータがあり得る。「ドントケア」のデータと見なされるデータは、トランスコーダの動作の結果として他の値にマッピングされる。
【0031】
データベースが多様な人々の国籍(市民権)情報を格納する状況を考慮すると、国籍は、文字列(「中国」、「韓国」、「インド」、「米国」などのような)を使用して格納することができる。しかし、国籍の可能な値は、有限のセットから持ってくるため、データベースに格納されたデータの量を減らすために辞書が使用される。従って、例えば「0」の値は中国を示し、「1」の値はインドを示し、「2」の値は韓国を示し、「3」の値は米国を示すように、国の名前ではなく代表値(インデックス)がデータベースに格納される。195カ国(2019年7月19日現在)があるため、1バイトを使用してインデックスを格納することができ、これは文字毎に1バイトを使用して国の名前の文字列を格納するのに使用されるものよりもはるかに少ない。
【0032】
しかし、遂行されるアクセラレーション演算(例えば、演算は、データベースにある米国市民の数を計算する可能性がある)は、米国の市民に関心があるかもしれない。従って、他の国の市民は、作業に関連がない。即ち、これらは「ドントケア」の値である。トランスコーダは、演算が適用するデータを反映するために、辞書とインデックスとをマッピングする。
【0033】
カラムフォーマットは、情報をエンコーディングするためにRLE又はビットパッキング(BP)を使用する。カラムストレージフォーマットで格納された値文字列(value string)の一部が与えられると、1ビットは、データがRLE又はビットパッキングを使用して格納されるかを示すために使用される。残りのデータは、それに応じて理解される。
【0034】
本発明の実施形態によるトランスコーダが、どのようにエンコーディングデータのための代替辞書を提供できるかを理解するために、データが多くの人々に対する国籍情報を含むデータの状況を考慮する。各個人が市民である国の名前は非常に長いが、国の名前の数は比較的少ないため(200カ国を代表しても、約8ビットを占め、相変わらず国の名前の文字当たり1バイトで各市民の国の名前の文字列を格納することができることから、大幅なコストの削減)、辞書は格納されるデータの量を意味のあるように減らすことができる。これらのエンコーディングは、任意の所望のエンコーディング方式(例えば、RLEエンコーディング、辞書圧縮、接頭辞エンコーディング、ビットパッキング、クラスターエンコーディング、スパースエンコーディング、及び間接エンコーディング)を使用することができる。
【0035】
今、適用される属性(条件子、predicate)(データのフィルタリング)が米国市民のみを検索する場合、他の国の市民に関連付けられるデータに対しては関心がない。例えば、ホストは、データベースに格納される米国の市民が何名かを知りたい可能性がある。変換結果として、辞書は、米国市民のための1つの項目に縮小され(「ドントケア」の項目に対する暗示的又は明示的な項目があり得る)、RLEエンコーディングは、米国ではない多様な国の市民のための隣接するRLE項目を結合するために圧縮される。従って、データのエンコーディングは、1(又は2)のロー(row)を含む辞書に圧縮される。米国市民ではない人々に関連付けられたデータが新たな辞書の単一の項目にインデックスを生成することができるため、実際のエンコーディングデータも減らすことができる。従って、属性(Predicate)をトランスコーダ内にプッシングすることにより、エンコーディングデータがフィルタリングされる可能性があり、最終的にホストに伝送されるデータの量を減少させる新たなエンコーディングが提供される。辞書マップは、元の辞書やトランスコーディングの辞書に対するマッピング(Mapping)を示す。
【0036】
FPGA(Field Programmable Gate Array)は、トランスコーダを実装(他の特徴の中で)するために使用され得るが、本発明の実施形態は、例えば、ASIC(Application-Specific Integrated Circuit)、GPU(Graphics Processing Unit)、又はソフトウェアを実行する他のプロセッサを含む他の実装の形態を有し得る。加えて、ISC(In-storage Compute)コントローラは、FPGAから分離されたり、FPGAの一部として実装されたりすることができる。
【0037】
(フィルタリングのような)アクセラレーション機能が遂行される特定のファイルが与えられると、ISCコントローラは、ファイルブロック(File2Block)マップを使用して、ファイルのデータを格納するブロックを順番と共に識別する。ISCコントローラは、ホスト内の構成要素として(ストレージ装置自体から分離されて)実装されるか、又はストレージ装置のいくつかのコントローラである。トランスコーダに(入力バッファを介して)入力される入力ストリームを提供するために、これらのブロックがアクセスされる。
【0038】
ファイルがカラムフォーマットで格納される場合、データ単位は、それ自体が多数のデータページを含むカラムチャンク(chunk)である。即ち、入力バッファはストレージ装置内のストレージモジュールからカラムチャンクを受信し、トランスコーダは、そのカラムのチャンク上で動作する。一般的に、各カラムチャンクは、そのカラムのチャンク及び/又はそのカラムチャンクのデータに適用する辞書に使用されるエンコーディング方式を指定する独自のメタデータを含む。しかし、全てのストレージフォーマットがこの配列を使用するわけではない。例えば、カラムストレージフォーマットはファイルの別の領域にメタデータを格納し(各カラムのチャンク内とは異なり)、このメタデータはファイル全体と共に使用されるエンコーディング及び辞書を指定する。従って、このようなカラムストレージフォーマットを使用してファイルを格納する場合、ISCコントローラは(File2Blockマップを使用して探し出した)ファイルのメタデータ領域からエンコーディング及び辞書を検索(回収)して、トランスコーダがカラムチャンクから所望のある情報を受信すると仮定するよりは(勿論、カラムストレージフォーマットを使用する場合に、カラムチャンクに辞書ページが有り得ない)、その情報をトランスコーダに提供する。同一のエンコーディング方式が全てのカラムチャンクに適用され得るが、このエンコーディング方式自体は、2つ以上の明確に区別されるエンコーディング方式を使用して、これらの間を適切にスイッチングするハイブリッド方式であり得る。例えば、ハイブリッドエンコーディング方式は、RLEエンコーディングとビットパッキングとが結合された方式である。
【0039】
辞書及びエンコーディング方式を決定することに加えて、ISCコントローラは、またエンコーディングデータに適用される属性を抽出し、その属性をトランスコーダにプッシュダウン(Push down)する。トランスコーダは、この全ての情報を多様な方式で使用する。例えば、ファイルと共に使用されるエンコーディングに関する情報はデータと共に使用されるトランスコーディングのルールを選択するのに使用されるが、辞書及び属性はトランスコーディング辞書及び辞書マップを生成するのに使用される。
【0040】
属性評価器は、属性を使用して辞書に関心のある項目、及びそうでない項目を判別して関心のある値(そして、可能なら「ドントケア」項目を表す値)を格納するトランスコーディング辞書と、元の辞書からトランスコーディング辞書にインデックスをマッピングする辞書マップとを生成する。
【0041】
トランスコーディング辞書に「ドントケア」の値に対する項目(Entry)が含まれている場合、この演算は、技術的に辞書に項目を追加する(元の辞書にそのような値が含まれていないため)。これらの項目を追加すると、新たな問題が発生することがある。トランスコーディング辞書に「ドントケア」の項目を追加することは、一般的にトランスコーディング辞書の1番目の項目(インデックス1)で発生し、これは属性に一致しない値を示すことを意図する。しかし、「ドントケア」」の項目の新たな値を生成することは、多くの費用がかかる。即ち、本発明のシステムは、(既存の全てのインデックスが1だけ離れているため)、全体の辞書をスキャンして再マッピングすることができる。「ドントケア」の項目を追加すると、メモリの再割り当てが発生したり、ビット幅のオーバーフローが発生したりする。例えば、与えられたビット数に対して可能な全ての値が辞書インデックスとして既に使用されている場合に、「ドントケア」の項目を辞書に入力すると、インデックスを表すために使用されるビット数が1ずつ増加する。データページが辞書の一部を使用する場合には、データページのビット幅がより小さくなり、トランスコーディング辞書に「ドントケア」の項目を追加すると、データページで1つの有効な値を使用することができなくなる。例えば、ビット幅が1の場合には、「ドントケア」の項目を追加すると、単一のビットを使用して表現できるよりは、多くの値を含み得るが、一方、ビット幅が2である場合には、ビット幅のオーバーフローなしに「ドントケア」の項目のためのスペースの余地が有り得る。
【0042】
この問題に対する解決策は、属性プッシュダウンのために辞書サイズが縮小されるか否かを判別するものである。少なくとも辞書が1つの項目に縮小されると、ビット幅のオーバーフローに対する憂慮なしに「ドントケア」の項目のための空間が確保される。辞書が少なくとも1つの項目により減少されない場合、エンコーディングデータは、トランスコーディングを遂行せずにISCコントローラ/ホストに直接伝送され、これによりトランスコーディングがデータの量を増加させる可能性を避けることができる。
【0043】
トランスコーダの出力は、(出力バッファを介して)ISCコントローラに再び返還される。これは2つの目的のために使用される。1番目に、属性をトランスコーダ内にプッシュダウンすると、トランスコーディングされたデータが生成されるが、トランスコーディングされたデータに対して遂行すべき演算がなお残っている可能性がある。例えば、ホストがファイルで米国の市民の数を計算しようと試みる場合に、トランスコーディングされたデータは、その市民を識別するが、カウントはしない。即ち、その動作は、ISCコントローラでアクセラレーション機能により遂行される。2番目に、トランスコーディングされたデータは、追加動作のためにホストに再び伝送される。ISCコントローラは、ホストと通信してトランスコーディングされたデータをホストに送る経路を提供する。
【0044】
図1は、本発明の一実施形態によるエンコーディングデータのトランスコーディングをサポートするソリッドステートドライブ(Solid State Drive:SSD)を含むシステムを示す図である。
図1で、ホストコンピュータであるマシン105は、プロセッサ110、メモリ115、及びストレージ装置120を備える。プロセッサ110は、任意の多様なプロセッサである。
図1は、単一のプロセッサ110を示すが、マシン105は任意の数のプロセッサを含み、各々のプロセッサは、シングルコア又はマルチコアプロセッサであり、任意の所望の組み合わせで組み合わされる。
【0045】
プロセッサ110は、メモリ115に連結される。メモリ115は、フラッシュメモリ、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)、永続性ランダムアクセスメモリ(Persistent Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)、磁気抵抗ランダムアクセスメモリ(MRAM)などのような不揮発性ランダムアクセスメモリ(NVRAM)などの任意の多様なメモリである。メモリ115は、異なるメモリタイプの任意の所望の組み合わせであり、メモリコントローラ125によって管理される。メモリ115は、「短期(short-term)」的にデータを格納するのに使用されるが、これは、データが長期に亘って格納されないと予想される。短期データ(short-term data)の例は、一時的ファイル、アプリケーションによってローカルに使用されるデータ(他のストレージ位置からコピーされた可能性がある)などを含む。
【0046】
プロセッサ110及びメモリ115は、多様なアプリケーションが実行されるオペレーティングシステムをサポートする。これらのアプリケーションは、メモリ115又はストレージ装置120からデータを読み出したり、記録したりするための要請を発行する。メモリ115は、「短期」と称されるデータを格納するのに使用される反面、ストレージ装置120は、「長期(long-term)」、即ちデータが長期的に格納されると予想されるデータを格納するのに使用される。ストレージ装置120は、装置ドライバー130を使用してアクセスされる。ストレージ装置120は、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)、及び任意の他の所望のフォーマットのような任意の所望のフォーマットである。
【0047】
図2は、
図1のマシンの詳細を示す図である。
図2で、一般的にマシン105は、マシンの構成要素の動作を調整するために使用可能なメモリコントローラ125及びクロック205を含む1つ以上のプロセッサ110を有する。プロセッサ110は、例えば、RAM(random access memory)、ROM(read-only memory)、又は他の状態のストレージ媒体を含むメモリ115に連結される。プロセッサ110は、またストレージ装置120、及びイーサネット(登録商標)コネクタ又はワイヤレスコネクタなどのネットワークコネクタ210に連結される。プロセッサ110は、またバス215に連結され、バス215は、他の構成要素のうちのユーザーインターフェース220及び入出力エンジン225を使用して管理される入力/出力インターフェースポートに装着される。
【0048】
図3は、他のアプローチを使用して同一のデータを伝達する
図1のストレージ装置120及び
図1のプロセッサ110を示す図である。1つのアプローチ(一般的なアプローチ)で、データは、ストレージ装置内のストレージ305(例えば、ハードディスクドライブ上のプラッター(platter)又はSSDなどのようなフラッシュメモリストレージ装置内のフラッシュメモリチップである)から読み取られ、プロセッサ110に直接伝送される。ストレージ装置120上に格納された(エンコーディングされた及び/又は圧縮された)データの総計がXバイトである場合、これはプロセッサ110に伝送されるデータの量である。この分析は、エンコーディング及び/又は圧縮されたデータを格納するのに使用されるストレージの量を考慮しており、エンコーディング及び圧縮されていないデータは、おそらくより多くのバイト数である(そうでない場合には、データをエンコーディング及び/又は圧縮するのに利点がないことが有る)。従って、例えばデータがエンコーディング及び圧縮されていない約10GBのストレージを使用することができるが、エンコーディング及び/又は圧縮される際に約5GBのストレージを使用する場合、約10GBではない約5GBのデータがストレージ装置120からプロセッサ110に伝送される。
【0049】
データを伝送するために提供された帯域幅(そして結果的に伝送に影響を与える使用された時間)の観点から、ストレージ120からプロセッサ110へのデータ伝送を考慮する。ストレージ装置120に格納されたデータがエンコーディング及び/又は圧縮される場合、ストレージ装置120に格納されたデータがプロセッサ110に直接伝送される場合(矢印310を介して示される)には、ストレージ装置120に格納されたデータの総計は、毎秒Bバイトの有効速度で伝送される。上述した例を続けると、ストレージ装置120とプロセッサ110との間の連結が毎秒約1GBの帯域幅を含む状況を考慮する。エンコーディング及び/又は圧縮されたデータは約5GBの空間を占有できるため、エンコーディング及び/又は圧縮されたデータは、総計5秒の間に約1GB/秒のデータの伝送速度で伝送される。しかし、(エンコーディング及び/又は圧縮の前に)格納されたデータの総計は約10GBであるため、データの有効伝送率Bは、毎秒約2GBである(約10GBのエンコーディング及び圧縮されないデータが約5秒内に伝送されるため)。
【0050】
対照的に、インストレージプロセッサ(in-storage processor)315がプロセッサ110に伝送されるデータの量を減少させるために、データをプリプロセッシング(pre-process)するために使用すると、より少ないローデータが伝送され得る(インストレージプロセッサ315が、伝送されるデータに対してより選択的なものであるため)。一方、インストレージプロセッサ315は、データを圧縮解除してプロセッシングする。(また、可能な限りデータをデコーディングすることもできる)。従って、インストレージプロセッサ315からプロセッサ110に伝送されるデータの量は、データの選択によって減少するが、圧縮の量(及び可能な限り、エンコーディング)によって増加する。即ち、代数的には、インストレージプロセッサ315からプロセッサ110に伝送されるデータ(矢印320を介して図示する)は、「X×Y×Z」のGBで表現され、ここで、「X」はエンコーディング及び/又は圧縮されたデータを格納するために使用される領域の容量であり、「Y」は圧縮率(圧縮(及び可能な限りエンコーディング)を使用して減少されたデータ貯蔵量)であり、「Z」は選択率(圧縮されていないデータからどのくらい多くのデータが選択されるか)である。同様に、データがインストレージプロセッサ315からプロセッサ110に伝送することができる有効速度は、「B×Y×Z」のバイト/秒(byte/second)になる。
【0051】
2つの公式の簡単な比較は、インストレージプロセッサ315を使用してプロセッサ110に伝送するデータを選択することが「X×Y×Z<X(又はB×Y×Z<B)」である場合、即ち「Y×Z<1」のときに優秀さを示す。そうでない場合、インストレージプロセッサ315によってプリプロセッシングした後、伝送されるデータの量は、インストレージプロセッサ315が選択性を適用しなくても、エンコーディング及び/又は圧縮されたデータの量よりも大きい。即ち、インストレージプロセッサ315がプロセッサ110に伝送するデータを選択しようと試みるよりも、元のエンコーディング及び/又は圧縮されたデータを伝送する方がより効率的である。
【0052】
図4は、本発明の一実施形態によるトランスコーディングデータを交換する
図1のストレージ装置120及びプロセッサ110を示す図である。
図4に示すように、エンコーディング及び/又は圧縮されたデータは、ストレージ305に格納される(ストレージ305は、ハードディスクドライブのプラッター、SSDなどのようなフラッシュメモリストレージ装置のフラッシュメモリチップ、又はいくつかの物理的なデータストレージ)。このデータ(圧縮データ405)は、圧縮解除器410に伝送され、圧縮解除器410は、データを圧縮解除して圧縮解除データ415を生成する。圧縮解除器410(又は圧縮解除エンジン)は、ハードウェア圧縮解除、又は適切な回路(汎用プロセッサ、FPGA(Field Programmable Gate Array)、ASIC(Application-Specific Integrated Circuit)、GPU(Graphics Processing Unit)、又はGPGPU(General Purpose GPU))で実行されるソフトウェアを使用して実装される。圧縮解除データ415は、エンコーディングとは圧縮が別のプロセスであり得るため、追加でエンコーディングされる。圧縮解除データ415は、データに対するトランスコーディングを行うトランスコーダ420に伝達される。トランスコーディングは、1つのエンコーディングから別のエンコーディングにデータを変換するプロセスと考えられる。
【0053】
上述した全てのプロセスは、ストレージ装置120内で発生する。トランスコーダ420が圧縮解除データ415をプロセッシングしてトランスコーディングされたデータ425を生成すると、トランスコーディングされたデータ425は、ホストコンピュータ105に提供される。デコーダ430は、トランスコーディングされたデータ425をデコーディングしてフィルタリングされたプレーンデータ(plain data)435を生成する。フィルタリングされたプレーンデータ435は、プロセッサ110に提供され、その後に、フィルタリングされたプレーンデータ435に対して所望の動作が遂行される。
【0054】
デコーダ430が、トランスコーディングされたデータ425をデコーディングするのは、トランスコーディングされたデータ425に適用されたエンコーディングに関する何かを知っているものを含むことに注目しなければならない。この情報は、例えばトランスコーディングされたデータ425に使用された特定のエンコーディング方式、又はトランスコーディングされたデータ425に使用された辞書を含む。
図4は、この情報が、ストレージ装置120からホストコンピュータ105に伝達されることを示していないが、この情報は、トランスコーディングされたデータ425と並列に(又はその一部として)ホストコンピュータ105に伝達される。勿論、トランスコーディングされたデータ425が実際にエンコーディング及び圧縮されていない場合(トランスコーダ420の演算結果がエンコーディング及び圧縮されていないデータを伝送するよりも多くの数の実際のバイトを伝送する場合に発生する)に、トランスコーディングされたデータ425は、エンコーディング方式又は辞書に関する情報を省略することができる。
【0055】
この時点で、エンコーディングと圧縮との違いを説明する価値がある。データの貯蔵に使用されるストレージの量を減らそうとする2つの概念が関連付けられているが、いくつかの違いがある。エンコーディングは、直接含まれるのに長すぎで比較的少ない数の区別される値を有するデータにインデックスを提供する辞書を使用することを一般的に伴う。例えば、他の195カ国があり、データが多数の人々の国籍に関する情報を格納した場合、各自の国籍を直接含むことは、少なくとも数バイト(国の名前から文字当たり1バイトと仮定する)を使用するなど、多くの量の空間を使用するようになる。一方、1~195の値は、全て単一のバイトを使用して表現することができる。辞書を使用して国の名前を示すのに適した国の名前のインデックスをデータに格納すると、情報の損失なしに格納されるデータの量が大幅に減少する。例えば、「米国、米国、韓国、韓国、韓国、中国、インド、中国、中国、中国、中国、中国、米国」という情報は、代わりに、表1に示す辞書で表すことができ、「3,3,2,2,2,2、0,1,0,0,0,0,0,3」と表され、153個文字から40個文字に減る。辞書に52個文字を使用することを考慮しても、簡単に辞書を使用することはコストを大幅に節約することができる。
【0056】
【0057】
辞書の値は、辞書になる値の数が大きいほど減少する。例えば、1,000,000個の異なる可能な値がある場合、各インデックスは、20ビットを使用して格納され得る。勿論、これは、まだ値を直接格納するために使用されるビット数よりも少なくなり得るが、(エンコーディングされていないデータを格納することに関連付けられた)エンコーディングの利点が減少する。そして、データの各項目について格納される値が固有であるか、又はインデックスを格納するために使用される空間のサイズが値を格納するために使用される空間のサイズと略同一である場合、辞書を利用するエンコーディングを使用することは、実際に格納されるデータの量を増加させる。続いて、人々に関するデータの例を挙げると、辞書を使用して年齢を格納することは年齢を直接格納するよりも効率的ではない。
【0058】
一方、圧縮は、一般的にハフマンコード(Huffman code)のようなエンコーディング方式を使用する。各データの相対的な頻度を決定するためにデータが分析されて、より頻繁なデータにより短いコードが割り当てられ、それほど頻繁ではないデータにより長いコードが割り当てられる。モールスコード(Morse code)は、ハフマンコードではないが、より頻繁なデータには短いシーケンスを使用し、それほど頻繁ではないデータには長いシーケンスを使用するよく知られているコードの例である。例えば、文字「E」は、シーケンス「ドット(dot)」(空白が続く)で表される一方、文字「J」は、シーケンス「ドット(dot)ダッシュ(dash)ダッシュダッシュ」(空白が続く)で表される。(モールスコードは空白を使用して1つの記号が終わり他の記号が開始される位置を示し、そして1つの記号に対するシーケンスは他の記号に対するシーケンスの接頭辞であるために(「E」は、ドットで表示されるが、一方「J」はドットで始まるが他の記号を含む)、モールスコードは、適切なハフマンコードではないが、多くの人がモールスコードにどの程度慣れているため、より頻繁なデータのためにより短い記号を使用して、あまり頻繁ではないデータに対する記号としてより長いコードを使用するコードの一般的な有用な例になるようにする)。
【0059】
再びエンコーディング方式に戻って、一旦辞書が設定されると、データを追加でエンコーディングするために使用されるいくつかの他のエンコーディング方式が存在する。このようなエンコーディング方式の例は、ランレングスエンコーディング(Run Length Encoding:以下、RLE)、ビットパッキング、接頭辞エンコーディング、クラスターエンコーディング、スパースエンコーディング、及び間接エンコーディングを含む。即ち、本発明の実施形態は、他のエンコーディング方式を、なお使用することもできる。ランレングスエンコーディング(RLE)及びビットパッキングは、後で多様な例で使用するため、ここで説明する。そして他のエンコーディング方式に関する情報は、簡単に見つけることができる。
【0060】
RLE(Run Length Encoding)は、値がしばしばグループで発生するという前提に依存する。各値を別途に格納する代わりに、その値の単一のコピーが、その値がデータでどの位の頻度で発生したかを示す数字と共に格納される。例えば、値「2」が連続して4回発生した場合に、値「2」を4回格納(4バイトのストレージを使用する)する代わりに、値「2」の発生回数(「4」)と共に格納する(2バイトのストレージを使用する)。従って、上記の例を続けると、シーケンス「3,3,2,2,2,2,0,1,0,0,0,0,0、3」は、「[2、RLE]、3、[4、RLE]、2、[1、RLE]、0、[1、RLE]、1、[5、RLE]、0、[1、RLE]、3」で表すことができる。「[2、RLE]、3」エンコーディングは、RLEを使用してエンコーディングされた情報があることを意味するものと理解される。即ち、値は「3」であり、この値は2回繰り返される。他のRLEエンコーディングは類似である(表現にRLEエンコーディングが使用されるインジケーターが含まれる理由は、下の
図7を参照して説明するハイブリッドエンコーディング方式の潜在的な使用に関連がある)。このシーケンスは、総計12バイトを使用する。即ち、各エンコーディングに対して、1バイトは次の値が繰り返される回数を格納し、1バイトは繰り返す値を格納する。
【0061】
元のシーケンスを格納するための14バイトと比較すると、12バイトはデータを格納する空間のサイズを大きく減らさない。しかし、比例的にこのエンコーディングは、このデータに必要なストレージの量が約14%を削減させることを示す。約5GBを占めるデータは、使用されるストレージで約14%が減少しても相当な節約であり、約700MBが節約される。
【0062】
各値の発生回数の代案として、各グループのスタート位置が格納され得る。各値の発生回数の代わりにスタート位置を使用する場合に、データは「[0、RLE]、3、[2、RLE]、2、[6、RLE]、0、[7、RLE]、1、[8、RLE]、0、[13、RLE]、3」で表すことができる。
【0063】
上述した説明は、RLEを使用して繰り返される値が単一のバイトに合った状況を説明する。そうでない場合、例えば、繰り返される値が「1000」の場合(「1000」は、10ビットを使用して格納することができる)には、どのようになるか?この場合、RLEは、7ビットのグループで値をシリアル化することができる。バイトで最上位のビットである各バイトの8番目のビットは、バイトが他のバイトで継続されるか否かを示す。
【0064】
例えば、値「1000」を考慮すると、「1000」の値は、2進値で「11 1110 1000」で表現される。この表現は、10ビットを使用するために単一のバイトで格納するのには値が大きすぎる。従って、値は7ビットのグループに分けられる(各グループに7ビットを含むように先行ゼロが追加される)。即ち、「0000111 1101000」である。今、シーケンスの1番目のバイトの前に「1」を付けてその値が示す値が次のバイトで続くことを示し、シーケンスの2番目のバイトの前に「0」を付けてその値がそのバイトで終わることを示す。従って、ビットシーケンスは、「10000111 01101000」となる。システムが、このビットシーケンスを読み取る場合、システムは、各バイトの最上位のビットを見てから、その値がそのバイト以上で持続されるか、又はそのバイトで終わるかを確認し、ビットシーケンスを値に再びアセンブルするときに、そのビットを除去することを知る。従って、「100 00111 01101000」は、「0000001111101000」になり(2つの追加の先行ゼロを追加して表現を最大2バイトまで導く)、元の値「1000」を回復することができる。
【0065】
勿論、各バイトで、1つのビットがバイト値の連続であるか否かを識別するのに使用される場合に、そのビットは値の一部として使用されない。従って、値が単一のバイトに合っても他のバイトでの値が継続されていないことを示す追加のビットが含まれる。なお、値が、8ビットに合っているが7ビットには合わない場合(例えば、128~255の値)、次のバイトで値を継続するか否かを示すビットを使用する場合に2バイトを使用して全体の値を表すことができる(値の最上位のビットが、エンコーディングで次の7ビットのグループに移動するため)。
【0066】
RLEを使用する際、ビット及び/又はバイトは、任意の所望の順序で提示され得る。例えば、ビットは、最上位のビットから最下位のビットに、又は最下位のビットから最上位のビットに提供され、バイトは2つの方式で同様に整列される。従って、例えばバイトが最下位から最上位に提示されるが各バイトのビットが最上位から最下位に提示されて連続ビットを使用する場合、値「16384」は「10000000 10000000 00000001」でエンコーディングされる。このビットシーケンスは、次のように解釈される。即ち、各バイトの1番目のビットは、連続ビットである(「1」は次のバイトが値を継続することを示し、「0」は値が次のバイトで継続されないことを示す)。連続ビットを除去した後、残っているのは「0000000 0000000 0000001」である。バイトが最上位から最下位に並べ替えるときに(及び先行ゼロを捨てることで既存の8ビットのグループに再構成する)、値は「01000000 00000000」になり、これは値「16384」の2進値に対応する。
【0067】
一方、ビットパッキング(Bit Packing)は、値が全体バイトよりも少ないビットを使用できるというアイデアを利用する。例えば、格納される値が0、1、2、及び3を含む場合には、2ビットが各々の値を表すのに使用される。全体のバイトは、各々の値を格納するために使用されるが、全体のバイトを使うというのは、ストレージの75%が実際に使用されていないことを意味する。ビットパッキングは、単一のバイト(又はバイトシーケンス)に1つ以上の値を格納してこの現象を活用する。ビットパッキングは、値のシーケンスが単一の値ではなく繰り返されるときに特に有利である。
【0068】
例えば、シーケンス「0,1,0,1、0,1,0、1」を考慮し、約4ビットを使用して各値を独特に識別する状況(即ち、15よりも大きい値は使用されない)を考慮すると、各値を別途に格納する代わりに(総計8バイト必要)、「[4、BP]0、1」のエンコーディングを使用する。このエンコーディングは、単一のバイトが値「0」を示す4ビット及び値「1」を示す4ビットを格納し、そのバイトが4回繰り返されることを示す。(RLEエンコーディングのように、ビットパッキングのエンコーディングは、データがハイブリッドエンコーディング方式で使用するためにビットパッキンを利用してエンコーディングされたとのインジケーターを含む。)1番目のバイトはグループのデータが繰り返される回数を表し、2番目のバイトはグループ自体に値を格納する。このエンコーディングは、データを格納するために約2バイトを使用し、その結果、シーケンスに使用されるストレージの量が約75%減少する。
【0069】
ビットパッキングを使用する際、データは任意の所望の方式でパッキングされる。例えば、各々の値が4ビットを使用するシーケンス「0,1」をパッキングする場合、シーケンスは「00010000」(最下位のビットから最上位のビットに値をパッキング)又は「00000001」(最上位のビットから最下位のビットの値をパッキング)で表される。ビットパッキングのいくつかの実施は、2つの戦略のいずれか1つを使用するが、ビットがストリームに配置される順序を逆にする(最下位のビットに該当するものが、先に来るように)。ビットパッキングでビットをパッキングするために他の技術が使用されることもある。
【0070】
勿論、ビットパッキングは、単一のバイトに合うグループを限定しない。RLEと同様に、ビットパッキングの値は、ビットを使用して値が次のバイトで継続されるか否かを識別する。
【0071】
エンコーディング及び圧縮の両方は、データ表現を格納するために使用される空間を減らそうとするため、その利点が倍数的に増加しないことが有り得る。エンコーディング及び圧縮の両方は、データの格納に使用される空間を減らすことを試みる。しかし、データが(エンコーディングのような)1つの方式で圧縮されると、(圧縮のような)他の圧縮方式を適用することが助けにならない可能性がある。圧縮は、データがエンコーディングされた後にデータに適用され、まだ使用されているストレージの量をわずかに減少させることができるが、エンコーディングデータに対する圧縮の影響は、エンコーディングされていないデータに対する圧縮の利点よりも少なくなる。(圧縮されるデータに関係なしに、データを圧縮する全ての方式を同一の利点で適用することができると、単純に繰り返された圧縮方式を適用するだけでも、任意の全てのデータを非常に小さいサイズに減らせることを希望するだろうが、少しだけ考えてみると、容易に明白であるように、そのような結果は現実の世界では現実的ではない。)
【0072】
図5は、
図1のストレージ装置120の詳細を示す図である。
図5を参照すると、ストレージ装置120はSSDとして示されているが、本発明の実施形態は、適切な修正により、ストレージ装置120のための他の形態をサポートすることができる。
図5に示すように、ストレージ装置120は、ホストインターフェース層(HIL)505、SSDコントローラ510、及び多様なフラッシュメモリチップ(515-1~515-8)(また「フラッシュメモリストレージ」ともいう)を含み、これは、多様なチャネル(520-1~520-4)に連結される。ホストインターフェース層505は、ストレージ装置120と
図1のマシン105との間の通信を管理する。これらの通信は、ストレージ装置120からデータを読み出す読み取り要請、及びストレージ装置120にデータを書き込む書き込み要請を含む。SSDコントローラ510は、フラッシュメモリコントローラ(
図5に図示せず)を使用して、フラッシュメモリチップ(515-1~515-8)上のガベージコレクション及び他の動作と共に読み取り及び書き込みの動作を管理する。
【0073】
SSDコントローラ510は、変換レイヤ525(フラッシュ変換レイヤ(FTL)ともいう)を含む。変換レイヤ525は、
図1のマシン105によって提供される論理ブロックアドレス(LBA)を、データが実際に格納されているSSD120の物理ブロックアドレス(PBA)に変換する機能を遂行する。このような方式で、
図1のマシン105は、データが実際に格納されるストレージ装置120上の物理アドレスを知らなくても、それ自身の固有のアドレス空間を使用してデータを参照することができる。これは、例えばデータがアップデートされるときに有利である。即ち、ストレージ装置120はデータを元の位置でアップデートしないことが有り得るため、ストレージ装置120は既存のデータを無効にしてストレージ装置120上の新たなPBAにアップデートを記録する。また、ガベージコレクションのために選択されたブロックにデータが格納されている場合に、そのデータはブロックが消去される前にストレージ装置120上の新たなブロックに記録される。変換レイヤ525をアップデートすることにより、
図1のマシン105は、データが他の物理ブロックアドレス(PBA)に移動するにつれてデータが実際に格納される位置から分離される。
【0074】
SSDコントローラ510は、またファイルブロックマップ530を含む。ファイルブロックマップ530は、ファイルに対するデータを格納するのにどのようなブロックが使用されるかを指定する。ファイルブロックマップ530は、例えばデータがカラムフォーマットで格納されるときに使用される。ファイルブロックマップ530は、変換レイヤ525の一部であるか(この場合、ファイルブロックマップ530は、ストレージ装置120の個々の構成要素とみなされないことがある)、変換レイヤ525を補完するか、(例えば、変換レイヤ525は比較的少ない数のブロックを利用するデータに使用されるのに対し、ファイルブロックマップ530は比較的多くの数のブロックを利用するデータに使用される)、又は変換レイヤ525を完全に代替する(この場合、変換レイヤ525は、SSDコントローラ510に存在しない)。
【0075】
SSDコントローラ510は、またトランスコーダ420を含む。しかし、本発明の実施形態は、ストレージ装置120内の他の場所にトランスコーダ420を有する構成を含むか(例えば、トランスコーダ420は、多くの可能性の中でもストレージ装置120内の他の位置の汎用プロセッサ(適切なソフトウェアを実行)、FPGA、ASIC、GPU、又はGPGPUを使用して実施)、又はストレージ装置120の外部にさえ存在することもできる。
【0076】
ストレージ装置120は、またストレージ装置120に格納されたデータを使用する方法を制御する命令語を実行する
図3のインストレージプロセッサ315(
図5には図示せず)を含み得る。また、
図3のインストレージプロセッサ315は、
図1のプロセッサ110の代わりにストレージ装置120上でローカルに動作を実行するために、インストレージコンピューティング機能のために使用される。トランスコーダ420のように、
図3のインストレージプロセッサ315は、ストレージ装置内のどこかに位置する汎用プロセッサ(適切なソフトウェアを実行する)、FPGA、ASIC、又はGPUを使用するか、又はストレージ装置120の外部にさえ実装され得る。
【0077】
図5は、4つのチャンネル(520-1~520-4)で構成される8つのフラッシュメモリチップ(515-1~515-8)を含むストレージ装置120を図示するが、本発明の実施形態は、任意の数のチャンネルで構成された任意の数のフラッシュメモリチップをサポートすることができる。同様に、
図5は、SSDコントローラ510がトランスコーダ420及び/又は
図3のインストレージプロセッサ315を含むことを示すが、本発明の実施形態は、
図5とは異なり、トランスコーダ420又は
図3のインストレージプロセッサ315で構成され得る。
【0078】
図6は、
図4のトランスコーダ420の詳細を示す図である。
図6を参照すると、トランスコーダ420は、入力辞書、入力ストリーム、及びエンコーディングタイプのような多様な入力を受信し、出力辞書及び出力ストリームのような多様な出力を生成する。要するに、トランスコーダ420は、エンコーディングタイプによって指定されたエンコーディング方式を使用してエンコーディングされる入力ストリームを取得するように動作し、出力ストリームを生成する。(入力ストリームがエンコーディングされることがあるが、以下の説明では、入力ストリームが圧縮されていない状況を考慮する。即ち、入力ストリームが圧縮されると、入力ストリームは追加のプロセッシングの前に圧縮解除される。)出力ストリームは、入力ストリームと同一のエンコーディング方式、又は異なるエンコーディング方式を使用してエンコーディングされる(又は両方とも、以下で説明するように、ハイブリッドエンコーディング方式が使用される場合、いくつかのデータは1つのエンコーディング方式から別のエンコーディング方式に変更され得る)。
【0079】
また、入力ストリームと出力ストリームとの間のエンコーディング方式が変更されなくても、エンコーディングそのものが変更され得る。例えば、特定の値が入力辞書及び出力辞書の他のインデックスに指定された場合には、辞書の変更事項が実際のデータに使用された値に反映されなければならない。このため、トランスコーダ420は、また入力辞書を取得して出力辞書にマッピングする。
【0080】
【0081】
この最後の2つの要点の例として、上記表1に示されている辞書を再び検討する。今、米国市民に関するデータに関心があった
図1のホストコンピュータ105が存在する状況を考慮すると、表1は、入力ストリームから受信されたデータを表すため、入力辞書としてみなされる。一方、表2は、出力ストリームのデータを示す出力辞書である。表2に対して、3種類以上の注意事項がある。第1に、表2は表1に示されている4つの項目と比較して2つの項目を含む。第2に、表2には「ドントケア」で表された項目が含まれる(別の名前で使用されても、この時点では、対応する値で表現されたデータは、
図1のホストコンピュータ105には関心を有していないため)。第3に、「米国(United States of America)」は表1で「ID3」を有するが、「米国(United States of America)」は表2で「ID1」を有する。この最後の注意事項は、入力ストリームで「ID3」に対する参照が、出力ストリームで「ID1」に変更されることがあることを意味する(そうではないと、データに意味がないことが有り得る)。
【0082】
これらの動作を達成するために、トランスコーダ420は、多様な構成要素を含む。トランスコーダ420は、サーキュラーバッファ605(Circular buffer)、ストリームスプリッタ610、インデックスマッパー615、現在のエンコーディングバッファ620、前のエンコーディングバッファ625、トランスコーディングルール630、及びルール評価器635を備える。
【0083】
サーキュラーバッファ605は、
図1のストレージ装置120内に位置する
図3のストレージ305から来るデータストリームを受信する。プロセッシングするデータ全体が大きくなるため(例えば、数ギガバイト(GB)又はテラバイト(TB)のデータ)、一度に全てのデータをロードしていくつかのストレージ内でプロセッシングしようとすると非現実的である。従って、入力ストリームは、ストリームとして受信され且つバッファリングされて、データがデータセット全体よりも小さな単位でプロセッシングされるべきである。
図6は、バッファ605をサーキュラーバッファとして示すが、本発明の実施形態は、入力ストリームから受信されたデータを格納するために、任意のタイプのバッファを使用することができる。
【0084】
ストリームスプリッタ610は、サーキュラーバッファ605からのデータを取得し、そのデータをチャンクに分割する。チャンクは、その後にインデックスマッパー615に伝達される。チャンクは、トランスコーダ420内の他の構成要素によってプロセッシングされるデータの単位を示し、その用語が別のコンテキストで使用され得るため、用語「チャンク」と混同してはならない(例えば、その用語である「カラムチャンク」は、下の
図9を参照して、使用される)。
【0085】
図7は、入力ストリームの一部(又は全部)である入力エンコーディングデータをチャンクに分割する
図6のストリームスプリッタ610を示す図である。
図7において、入力データは、他のデータの中から3つのエンコーディングデータである「[1、BP]、3、3、[4、RLE]、2、[5、RLE]、0」を含むものとして示される。上述したように、これらのチャンクは、ビットパッキング及びRLEエンコーディング方式を使用してエンコーディングされたデータを示す。このエンコーディングは、「3,3,2,2,2,2、0,0,0,0,0」の値の(エンコーディングされていない)のシーケンスを示す。個々のエンコーディングに対して、
図1のホストコンピュータ105が、そのデータ(又はそのデータの一部)に関心があることもあり、関心がないこともある。
図1のホストコンピュータ105が各々のエンコーディング値に関心かあるか否かは、トランスコーディングルール630に依存する。即ち、
図6のストリームスプリッタ610は、
図1のホストコンピュータ105がどのようなデータに関心を有するか知らないことが有り得る。従って、
図6のストリームスプリッタ610は、入力データストリームを、各チャンクが異なるピース(piece)のエンコーディングデータを含むチャンクに分割する。従って、チャンク(705-1)は「[1、BP]、3、3」のエンコーディングを含み、チャンク(705-2)は「[4、RLE]、2」のエンコーディングを含み、チャンク(705-3)は「[5、RLE]、0」のエンコーディングを含む。
【0086】
図7に対して、注意すべき少なくとも2つの追加の要点が存在する。第1に、
図7に示した例としての入力ストリームにも留意しなければならないが、いくつかのデータはビットパッキングを使用してエンコーディングされ、いくつかのデータはRLEを使用してエンコーディングされる。仮に、全てのデータが単一のエンコーディング方式(例えば、RLE)を使用してエンコーディングされる場合、
図6のストリームスプリッタ610は、
図6のトランスコーダ420に入力されたエンコーディングタイプから事実を決定することができる。しかし、時には、ハイブリッドエンコーディング方式が使用されることもある。ハイブリッドエンコーディング方式で、いくつかのデータは単一のエンコーディング方式(例えば、RLE)を使用してエンコーディングされ、いくつかのデータは他のエンコーディング方式(例えば、ビットパッキング)を使用してエンコーディングされる(概念は、ハイブリッドエンコーディング方式で使用されたエンコーディング方式を2つ以上に一般化することもある)。ハイブリッドエンコーディング方式で、その情報そのものだけではどのようなエンコーディング方式でどのようなデータがエンコーディングされるかをストリームスプリッタ610に教えてくれないため、
図6のトランスコーダ420は、エンコーディングタイプを入力として受信しないことも有る。代わりに、
図6のストリームスプリッタ610は、チャンクそのものを見て各々のチャンクにどのようなエンコーディング方式が使用されるかを決定する。
【0087】
特定のチャンクをエンコーディングするために使用されるエンコーディング方式を決定する1つの方法は、チャンク内の特定のビットの値を検査するものである。例えば、カラムのストレージフォーマットは、1番目のバイトの最下位のビットを使用することにより、RLE又はビットパッキングを利用して特定のデータチャンクがエンコーディングできるかどうかを示す。即ち、そのビットの値が「0」の場合にはRLEが使用され、そのビットの値が「1」の場合にはビットパッキングが使用される。その次に、このビットはバイトから除去され、残りのビットは論理的に1ビット右にシフトされてエンコーディングに使用される値を生成する。
【0088】
例えば、第1のチャンク(705-1)を考慮すると、第1のチャンク(705-1)は、ビットシーケンス「00000011 00110011」を含む。
図6のストリームスプリッタ610が第1のバイトの「00000011」を読み取ると、
図6のストリームスプリッタ610は、最下位のビット(最後の「1」)を検査する。最下位のビットは「1」であるため、
図6のストリームスプリッタ610は、このチャンクがビットパッキングを使用してエンコーディングされると決定する。この最下位のビットが除去され、第1のバイトの残りのビットが論理的に右に1ビットずつシフトされてバイト「00000001」が生成される。このバイトの1番目の(最上位)ビットは「0」であるため、
図6のストリームスプリッタ610は、バイトが単に「00000001」(次のバイトでの値が継続されない可能性があることを示す「0」のビットが除去され、また他の先行ゼロが追加される)であること、及びグループ(決定されるべき)が一回繰り返されることを示すことを決定する。その後、
図6のストリームスプリッタ610は、次のバイト「00110011」を読み取る。このバイトの最上位のビットは「0」であるため、
図6のストリームスプリッタ610は、この値が次のバイトで継続されていないことを知る。連続ビットが除去され、先行ゼロが追加されて「00110011」の値を生成し、これは「3」及び「3」の値を示す。従って、
図6のストリームスプリッタ610は、エンコーディングがビットパッキングを使用して値「3」が2回繰り返されることを示すものと決定する。
【0089】
一方、第2のチャンク(705-2)を考慮すると、第2のチャンク(705-2)は、ビットシーケンス「00001000 00000010」を含む。
図6のストリームスプリッタ610は、第1のバイト「00001000」を読み取ると、最下位のビット(最後の「0」)を検査する。最下位のビットは「0」であるため、
図6のストリームスプリッタ610は、このチャンクがRLEを使用してエンコーディングされると決定する。この最下位のビットが除去され、1番目のバイトの残りのビットが論理的に右に1ビットずつシフトされてバイト「00000100」が生成される。このバイトの1番目の(最上位)ビットは「0」であるため、
図6のストリームスプリッタ610は、バイトが単に「00000100」(次のバイトで値が継続されないことを示す「0」のビットが除去され、また他の先行ゼロが追加される)であること、及びその値(決定されるべき)が4回繰り返されることを示すことを決定する。その後、
図6のストリームスプリッタ610は、次のバイト「00000010」を読み取る。このバイトの最上位のビットは「0」であるため、
図6のストリームスプリッタ610は、この値が次のバイトで続行されないことを知る。連続ビットを除去して、先行ゼロを追加して「00000010」の値を生成する。従って、
図6のストリームスプリッタ610は、エンコーディングがRLEを使用して値「2」が4回繰り返されることを示すものと決定する。
【0090】
勿論、
図6のストリームスプリッタ610は、ビットシーケンスに対してこの分析の両方を遂行しないことがある。
図6の全てのストリームスプリッタ610は、最上位のビットである「0」があるバイトが表されるまでバイトを読み取ってから(このバイトシーケンスは、エンコーディング方式と次に来る値の繰り返し回数を示す)、最上位のビット「0」を有する他のバイトが発生するまでバイトを読み取る(このバイトシーケンスは、エンコーディングされる値を示す)。
図6のストリームスプリッタ610は、読み取られたビット(エンコーディングされたチャンクの全体を示す)を、
図6のインデックスマッパー615に伝達する(そして、
図6のルール評価器635による今後のプロセッシングのために)。即ち、
図6のインデックスマッパー615(及び/又は
図6のルール評価器635)は、チャンクにどのようなエンコーディング方式が使用され、そしてどのような値がそのようにエンコーディングされるかを決定するために説明した分析を遂行する。しかし、
図6のストリームスプリッタ610(又は
図6のインデックスマッパー615又は本発明の任意の他の構成要素)が特定のデータチャンクをエンコーディングするために使用されるエンコーディング方式を決定するために分析を遂行する場合、
図6のストリームスプリッタ610(又は
図6のインデックスマッパー615又は他の構成要素)は、このような分析の繰り返しを避けるために、エンコーディングタイプを他の構成要素に伝達する。この動作は、チャンクがプロセッシングされるときにエンコーディング方式を識別するビットがチャンクから除去される場合には、特に重要である。即ち、エンコーディングのタイプがない場合、エンコーディングのデータを後でプロセッシングする構成要素は、エンコーディングのデータを正しくプロセッシングできないことがある。
【0091】
第2に、第2及び第3のチャンク(705-2及び705-3)は、両方共にRLEを使用してエンコーディングされた連続的なチャンクを示すことに留意しなければならない。
図6のストリームスプリッタ610は、全ての連続的なRLEエンコーディングを単一のチャンクとみなすと予想する(他のエンコーディング方式を使用してチャンクを分割する)。しかし、その目的は、入力ストリームをトランスコーディングして関心のない全てのデータを単一の「ドントケア」値に統合することを覚えなければならない。
図6のストリームスプリッタ610は、
図1のホストコンピュータ105が関心のあるデータに対する情報を有しないことを思い出そう。
図6のストリームスプリッタ610が同一のエンコーディング方式を使用する全てのエンコーディングを同一のチャンクと見なす場合、
図6のストリームスプリッタ610は、最終的に、
図1のホストコンピュータ105が関心のあるデータを関心のないデータと混合することになる。更に、入力ストリーム内の全てのデータが同一のエンコーディング方式を使用してエンコーディングされた場合、全体の入力ストリームは単一のチャンクとみなされ、これは
図6のトランスコーダ420の一部としてストリームスプリッタ610の有用性を排除する。
【0092】
第3に、上述した説明は、2つの異なるエンコーディング方式を区別するために、1ビットを使用するハイブリッドエンコーディング方式に焦点を当てているが、本発明の実施形態は、2つ以上の別個のエンコーディング方式を使用するハイブリッドエンコーディング方式に一般化される。勿論、2つ以上のエンコーディング方式が使用される場合は、1つ以上のビットが異なるエンコーディング方式を区別するために使用される。例えば、3つ又は4つのエンコーディング方式が使用される場合、2つのビットがエンコーディング方式を区別するために使用され、5つ、6つ、7つ、又は8つの異なるエンコーディング方式が使用される場合、3つのビットが異なるエンコーディング方式を区別するために使用される等である。
【0093】
(エンコーディング方式を区別するために使用されたビットは、他の目的のためにも使用されることがあることに留意しなければならない。例えば、3つのエンコーディング方式が使用される状況を考慮すると、第1のバイトの最下位のビットが特定の値(「0」のような)である場合には、RLEのような1つのエンコーディング方式が使用され、その次の最下位のビットは値を表すために使用される。しかし、第1のバイトの最下位のビットが他の特定の値(「1」のような)である場合には、その次の最下位ビットは残りの2つのエンコーディング方式(ビットパッキング及びクラスターエンコーディングのような)を区別するために使用される。)
【0094】
再び
図6を参照すると、インデックスマッパー615は、ストリームスプリッタ610からチャンクを受信する。インデックスマッパー615は、入力辞書からのエンコーディングされた値を出力辞書のエンコーディングされた値にマッピングする。例えば、上記表1及び表2に示す辞書を再び検討すると、「米国」に対応する値に関心を有るためにエンコーディングされたチャンクで発見されるとき、「3」の値は「1」の値に置き換えられ、そしてエンコーディングされたチャンクで発見された他の全ての値は「0」の値に置き換えられる。
【0095】
図8は、入力辞書を出力辞書にマッピングする
図6のインデックスマッパー615を示す図である。
図8を参照すると、インデックスマッパー615は、入力辞書805を受信して出力辞書810を生成するものとして示される。
図1のホストコンピュータ105がどのようなデータに関心があるかに対する情報が与えられると、インデックスマッパー615は、出力辞書810を生成する。インデックスマッパー615は、また入力辞書805から出力辞書810へのマップを生成する。上述した例を続けると、このマップは、表3に示したマップを特定することができる。図示したように、「3」は、インデックス「1」にマッピングされ、他の全てのインデックスは、インデックス「0」にマッピングされる。
【0096】
【0097】
インデックスマッパー615に対して注目に値するいくつかのポイントがある。第1に、インデックスマッパー615は、
図6のトランスコーダ420とは別の構成として示されるが、インデックスマッパー615は、
図6のルール評価器635と共に動作する(又はその一部として実装される)。第2に、インデックスマッパー615がどのように出力辞書810(及び表3に示したマップ)を生成するかは、
図1のホストコンピュータ105が関心のあるデータに依存する。インデックスマッパー615が
図1のホストコンピュータ105の関心のあるデータを学習する方法は、後述する
図11を参照して説明する。第3に、トランスコーディングデータは、入力辞書805を出力辞書810にマッピングするインデックスマッパー615及び
図6のトランスコーディングルール630の両方を伴う。即ち、
図6のトランスコーディングルール630は、入力辞書805から出力辞書810へのマップに依存する。その逆は成立しない。即ち、入力辞書805から出力辞書810へのマップ(そして、それに伴うインデックスマッパー615の動作)は、
図6のトランスコーディングルール630を参照せずに生成される。
【0098】
インデックスマッパー615に関する第4のポイントは、より微妙である。インデックスマッパー615は、出力辞書810に「ドントケア」の値という新たな項目を効果的に追加する。実装を単純化するために、インデックスマッパー615は、常に「ドントケア」の値に対して同一のインデックスを使用することが理解される。入力辞書805のサイズは、データセットに基づいて変化するため、インデックス「0」が常に使用される。
【0099】
しかし、データセットの全てのデータが
図1のホストコンピュータ105に関心があることが明らかになればどうなるか?この場合には、インデックスマッパー615は、出力辞書810に項目を追加したが、出力辞書810のどのような項目も除去されなかった。これらの2つの事実の組み合わせは、出力辞書810が入力辞書805よりも(1つの項目で)より大きくなることを意味する。入力辞書805がnの一部の値に対して正確に2n個の項目を有する状況を考慮すると、この事実は、入力辞書805への全てのインデックスがnビットを使用して表現されることを意味する。出力辞書810に「ドントケア」の項目を追加すると、出力辞書810に「2n+1」の項目があることを意味し、これはもはや「n+1」ビットがデータセットで可能な全ての値を表すために使用されることを意味する。即ち、この問題を「ビットオーバーフロー(bit overflow)」という。この追加のビットは、エンコーディングデータに影響を与え、データを正しく表すために新たなビットの追加を要求する。従って、出力辞書810の単一の小さな変化は、データ表現に莫大な波及効果をもたらし、エンコーディングデータを表すために使用されるストレージ容量を大幅に増加させる。
【0100】
上述した例は、「ドントケア」の項目の導入が可能な全てのインデックスを出力辞書810に示す新たなビットを追加する状況に焦点を当てているが、出力辞書のサイズが、新たなビットが全ての可能なインデックスを表すために使用されるところまで増加される場合にも、同様の問題が発生する。表1に示した入力辞書を再び考慮し、中国及びインドの市民に関心のある(表1の「0」及び「1」のインデックス)、
図1のホストコンピュータ105が存在する状況を考慮すると、これらのインデックスは、単一のビットを使用して表現される(1ビットは「0」及び「1」の値を表すのに使用されるため)。これらの値を、ビットパッキングを使用してエンコーディングすると、8つのこのような値を単一のバイトでパッキングすることができる。しかし、インデックス「0」が出力辞書810の「ドントケア」の値に割り当てられている場合には、中国及びインドのインデックスは、他の値(例えば、「1」及び「2」)にマッピングされる。「2」の値は、2ビットを使用するため、これ以上8つの値を単一のバイトに束ねることができない。即ち、ビットのオーバーフローが発生する。
【0101】
ビットオーバーフロー(bit overflow)の問題に対する使用可能ないくつかのソリューションがある。1つは、入力辞書805に対する任意のインデックスが
図1のホストコンピュータ105に関心のないデータを表すかを確認するものである。入力辞書805の全てのデータがホストコンピュータ105に関心のあることが判明した場合、入力ストリームをトランスコーディングするのは全く意味がなく、入力ストリームは修正せずに出力ストリームに直接マッピングされる。
【0102】
しかし、ビットパッキングでビットオーバーフローの問題が相変わらず発生するため、このソリューションは、有用であるが十分ではない可能性がある。ビットパッキングでビットオーバーフローを避けるために、出力辞書810で任意のインデックスを表すのに使用されるビット数が、入力辞書805で任意のインデックスを表すのに使用されるビット数よりも大きくないことを保証することが解決策になる。2つの可能な解決策をここで説明する。1つの解決策は、出力辞書810で可能な最も高いインデックスを「ドントケア」の値に割り当てるものである。即ち、これは、最初に入力辞書805から出力辞書810に関心のある全てのインデックスをマッピングした後、使用されていない最も低いインデックスを「ドントケア」の値として使用する。他の解決策は、入力辞書805で
図1のホストコンピュータ105に関心のないインデックスを識別し、そのインデックスを「ドントケア」の値として使用するものである。2つの解決策において、入力辞書805へのインデックスは、出力辞書810でより大きなインデックスに置き換えられることなく、これはビットオーバーフローの問題を回避することができる。このような解決策の欠点は、入力辞書805から独立した「ドントケア(do not care)」に対するインデックスを選択できない可能性があることである。
【0103】
再び
図6を参照すると、現在のチャンク(インデックスマッパー615によってプロセッシングされる)は、現在のエンコーディングバッファ620に格納される。そこから、ルール評価器635は、前のエンコーディングバッファ625のエンコーディングデータと共に現在のエンコーディングバッファ620のエンコーディングデータを評価し、エンコーディングが変更されなければならないか否か及び出力ストリームに出力されるデータを決定する。要するに、ルール評価器635は、現在のエンコーディングバッファ620のエンコーディングデータが、前のエンコーディングバッファ625のエンコーディングデータに結合されるか否かを決定する。そうである場合、現在のエンコーディングバッファ620のエンコーディングデータは、前のエンコーディングバッファ625のエンコーディングデータに追加される。しかし、そうでない場合、前のエンコーディングバッファ625のエンコーディングデータは出力ストリームに出力され、現在のエンコーディングバッファ620のエンコーディングデータは前のエンコーディングバッファ625に移動する。(この分析は、前のエンコーディングバッファ625にデータが存在する状況を考慮する。例えば、第1のデータチャンクで発生する可能性があるように、前のエンコーディングバッファ625がデータを含んでいない場合、現在のエンコーディングバッファ620のエンコーディングデータを、前のエンコーディングバッファ625のトランスコーディングされたデータに結合しようと試みる問題はない。)
【0104】
これは、「エンコーディングデータは、いつ結合されるか?」という質問につながる。それに対する短い答えは、
図1のホストコンピュータ105が関心を有するデータと、ホストコンピュータ105が関心を有さないデータとをチャンクが全て示す場合に、エンコーディングされたデータチャンクが結合されるというものである。いくつかの例は、ルール評価器635がどのように動作するかを説明するのに役立つ。2つの例で、入力ストリームは同一のデータ(「[1、BP]、3、3、[4、RLE]、2、[1、BP]、0、1、[5、RLE]、1、[1、BP]、3」を含み、入力辞書は表1に示す通りである。2つの例で、行(row)は、現在のエンコーディングバッファ620及び前のエンコーディングバッファ625に存在する「スナップショット(snapshot)」を示し、そのときの出力ストリームに出力されたものを示す。
【0105】
1番目の例で、
図1のホストコンピュータ105は、米国の市民に関するデータを要請する。表1から分かるように、「米国」のインデックスは「3」である。従って、出力辞書は、表2に示したものと同一である。
【0106】
【0107】
表4の第1行に示すように、ルール評価器635によってプロセッシングされた第1のチャンクは「[1、BP]、3、3」である。このチャンクは関心のあるデータ(値「3」)を含むため、値「3」を値「1」に置き換えるために、ルール評価器635は、
図8の入力辞書805から出力辞書810へのマップを使用する。その後、このトランスコーディングされたチャンクは、(表4の第2行に示すように)前のエンコーディングバッファ625に移動する。
【0108】
表4の第2行では、ルール評価器635によってプロセッシングされた第2のチャンクは「[4、RLE]、2」である。このチャンクは関心のあるデータ(値「2」)を含まない可能性があるため、値「2」を値「0」(このデータが「ドントケアのデータを表す)に置き換えるために、ルール評価器635は、
図8の入力辞書805から出力辞書810へのマップを使用する。このチャンクは「ドントケア」のデータを含むが、前のエンコーディングバッファ625が関心のあるデータを含むため、前のエンコーディングバッファ625のデータは(表4の第3行に示されるように)出力ストリームに出力され、現在のトランスコーディングされたチャンクは(表4の第3行に示されるように)前のエンコーディングバッファ625に移動する。
【0109】
表4の第3行では、ルール評価器635によってプロセッシングされた第3のチャンクは「[1、BP]、0、1」である。このチャンクは関心のあるデータ(値「0」及び「1」)を含まない可能性があるため、値「0」及び値「1」を値「0」(ドントケアのデータであることを示す)に代替するために、ルール評価器635は、
図8の入力辞書805から出力辞書810へのマップを使用する。
【0110】
このチャンクは「ドントケア」のデータを含み、前のエンコーディングバッファ625は、既に「ドントケア」のデータを含むため、この2つのチャンクは結合される。このチャンクはビットパッキングを使用するが、前のエンコーディングバッファ625のチャンクはRLEを使用するため、両方のエンコーディング方式のいずれかが他のエンコーディング方式に置き換えられる。この例で、ビットパッキングのエンコーディングデータは、RLEを使用してトランスコーディングする。(ビットパッキングを使用して複数の値が単一の値として格納されると、グループ全体が複製され、複製された値の数はパッキングされた値の数の倍数である。一方、RLEは単一の値を複製する。)結果として、前のエンコーディングバッファ625は、今「[6、RLE]0」(表4の第4行に示すように)を格納し、これは2番目のチャンクの4つの「ドントケア(do not care)」の値と3番目のチャンクの2つの「ドントケア」の値とを結合したものである。
【0111】
表4の第4行では、ルール評価器635によってプロセッシングされた第4のチャンクは「[5、RLE]、1」である。このチャンクは関心のあるデータ(値「1」)を含まない可能性があるため、ルール評価器635は、値「1」を値「0」(ドントケアのデータであることを示す)に代替するために、
図8の入力辞書805から出力辞書810へのマップを使用する。
【0112】
このチャンクは「ドントケア」のデータを含み、前のエンコーディングバッファ625は、「ドントケア」のデータを既に含むため、この2つのチャンクは結合される。両方のチャンクは、同一の「ドントケア」の値をエンコーディングするためにエンコーディング方式でRLEを使用するため、ルール評価器635は、前のエンコーディングバッファ625でチャンクの複製値を増加させることによって2つのチャンクを結合する。その結果、前のエンコーディングバッファ625は、今「[11、RLE]0」(表4の第5行に示すように)を格納し、これは2番目のチャンクからの4つの「ドントケア」の値、3番目のチャンクからの2つの「ドントケア」の値、及び4番目のチャンクからの5つの「ドントケア」の値を組み合わせたものである。
【0113】
表4の第5行では、ルール評価器635によってプロセッシングされた第2のチャンクは「[11、BP]、3」である。このチャンクは関心のあるデータ(値「3」)を含むため、値「3」を値「1」に代替するために、ルール評価器635は、
図8の入力辞書805から出力辞書810へのマップを使用する。このトランスコーディングされたチャンクは関心のあるデータを含む一方、前のエンコーディングバッファ625は「ドントケア」のデータを含むため、トランスコーディングされたチャンクは、前のエンコーディングバッファ625のチャンクに結合されない可能性がある。
【0114】
この時点で、一般的に前のエンコーディングバッファ625のトランスコーディングされたデータは出力ストリームに出力され、現在のトランスコーディングされたチャンクは前のエンコーディングバッファ625に移動するはずである。しかし、現在のトランスコーディングされたチャンクは、入力ストリームで最後のチャンクであるため、両方ともトランスコーディングされたチャンクが出力される(勿論、前のエンコーディングバッファ625のチャンクが先に出力される)。表4の第6行は、最終的な出力を示す。
【0115】
2番目の例で、
図1のホストコンピュータ105は、韓国の国民に関する資料を要請した。表1から分かるように、「韓国」のインデックスは「2」である。従って、出力辞書は、表5のように表すことができる。
【0116】
【0117】
表6の第1行に示すように、ルール評価器635によってプロセッシングされた第1のチャンクは「[1、BP]、3、3」である。このチャンクは関心のないデータ(値「3」)を含むため、値「3」を値「0」(「ドントケア」のデータであることを示す)に代替するために、ルール評価器635は、
図8の入力辞書805から出力辞書810へのマップを使用する。このトランスコーディングされたチャンクは、(表6の第2行に示すように)前のエンコーディングバッファ625に移動する。
【0118】
表6の第2行で、ルール評価器635によってプロセッシングされた第2のチャンクは「[4、RLE]、2」である。このチャンクは関心のあるデータ(値「2」)を含むため、値「2」を値「1」に代替するために、ルール評価器635は、
図8の入力辞書805から出力辞書810へのマップを使用する。このチャンクは関心のあるデータを含むが、前のエンコーディングバッファ625は関心のあるデータを含まない可能性があるため、前のエンコーディングバッファ625のデータは(表6の第3行に示すように)出力ストリームに出力され、現在のトランスコーディングされたチャンクは(表6の第3行に示すように)前のエンコーディングバッファ625に移動する。
【0119】
表6の第3行で、ルール評価器635によってプロセッシングされた第3のチャンクは「[1、BP]、0、1」である。このチャンクは関心のあるデータ(値「0」及び「1」)を含まない可能性があるため、値「0」及び値「1」を値「0」(ドントケアのデータであることを示す)と代替するために、ルール評価器635は、
図8の入力辞書805から出力辞書810へのマップを使用する。このチャンクは関心のないデータを含むが、前のエンコーディングバッファ625は関心のあるデータを含むため、前のエンコーディングバッファ625のデータは(表6の第4行に示すように、)出力ストリームで出力され、現在のトランスコーディングされたチャンクは(表6の第4行に示すように)前のエンコーディングバッファ625に移動する。
【0120】
表6の第4行で、ルール評価器635によってプロセッシングされた第4のチャンクは「[5、RLE]、1」である。このチャンクは関心のあるデータ(値「1」)を含まないため、値「1」を値「0」(ドントケアのデータであることを示す)に代替するために、ルール評価器635は、
図8の入力辞書805から出力辞書810へのマップを使用する。
【0121】
このチャンクは「ドントケア」のデータを含み、前のエンコーディングバッファ625は「ドントケア」のデータを含むため、この2つのチャンクは結合される。このチャンクはRLEを使用するが、前のエンコーディングバッファ625のチャンクはビットパッキングを使用するため、両方のエンコーディング方式のいずれかが他のエンコーディング方式に代替される。この例では、ビットパッキングのエンコーディングデータは、RLEを使用してトランスコーディングされる。(再び、値のグループではない単一の値が複製されるため、RLEを選択する)結果として、前のエンコーディングのバッファ625は、今「[7、RLE]0」(表4の第5行に示されたように)を格納し、これは、3番目のチャンクの2つの「ドントケア」の値と4番目のチャンクの5つの「ドントケア」の値とを結合したものである。
【0122】
表6の第5行で、ルール評価器635によってプロセッシングされた第2のチャンクは「[1、BP]、3」である。このチャンクは関心のあるデータ(値「3」)を含まない可能性があるため、値「3」を値「0」(ドントケアのデータであることを示す)に代替するために、ルール評価器635は、
図8の入力辞書805から出力辞書810へのマップを使用する。
【0123】
このチャンクは「ドントケア」のデータを含み、前のエンコーディングバッファ625は「ドントケア」のデータを含むため、この2つのチャンクは結合される。このチャンクはビットパッキングを使用するが、前のエンコーディングバッファ625のチャンクはRLEを使用するため、両方のエンコーディング方式のいずれかが他のエンコーディング方式に置き換えられる。この例では、ビットパッキングのエンコーディングデータは、RLEを使用してトランスコーディングされる。結果として、前のエンコーディングのバッファ625は、今「[8、RLE]0」を格納し、これは、3番目のチャンクの2つの「ドントケア」の値、4番目のチャンクの5つの「ドントケア」の値、及び5番目のチャンクの1つの「ドントケア」の値を結合したものである。
【0124】
最後に、第5のチャンクは、入力ストリームの最後のチャンクであるため、ルール評価器635は、前のエンコーディングバッファ625にトランスコーディングされたデータを出力する。表6の第6行は、最終的な出力を示す。
【0125】
上記の例の中のいずれも連続的なチャンクが関心のあるデータを含む状態を示してはいない。本発明の実施形態は、このような状況を異なる方法でプロセッシングすることができる。本発明の一実施形態で、現在のエンコーディングバッファ620が関心のあるデータを含む場合、前のエンコーディングバッファ625の任意のチャンクが出力ストリームに出力される(即ち、現在のエンコーディングバッファ620が関心のあるデータを含む場合には、現在のエンコーディングバッファ620のデータを前のエンコーディングバッファ625のデータに結合しようとする試みは発生しない)。本発明の他の実施形態では、現在のエンコーディングバッファ620のチャンク及び前のエンコーディングバッファ625のチャンクが結合される。しかし、本発明のこのような実施形態で、このような組み合わせが実現可能なのか否かは、関心の値が同一なのか否かによって異なる場合がある。例えば、1つのチャンクが中国の市民に関するデータを格納し、他のチャンクが韓国の国民に対するデータを含む場合、このようなチャンクは、本発明の実施形態に基づいて結合されるか又は結合されないことがある。一方、2つのチャンクに韓国の国民に関するデータが含まれる場合、両方のチャンクを結合することが可能である。
【0126】
ルール評価器635は、トランスコーディングルール630を使用して、関心のあるデータ及び関心のないデータ、前のエンコーディングバッファ625に格納されるデータvs出力可能なデータ、及びチャンクが1つのエンコーディング方式から他のエンコーディング方式にトランスコーディングされるか否かを決定する。
【0127】
上述したように、ルール評価器635は、またインデックスマッパー615を含む。ルール評価器635がインデックスマッパー615を含む本発明の実施形態で、ルール評価器635は、トランスコーディングルール630が適用される前に、現在のエンコーディングバッファ620の内容にインデックスマッパー615を適用する。
【0128】
表7は、使用されたエンコーディング方式がRLE又はビットパッキングの場合に使用されるいくつかのルールを示す。他のエンコーディング方式が使用される本発明の実施形態で、ルールはそれに応じて変更される。即ち、全てのこのような変形は本発明の実施形態とみなされる。なお、本発明の実施形態は、2つ以上の異なるタイプのエンコーディング方式の間でトランスコーディングデータを管理するルールを含む。例えば、ハイブリッドエンコーディング方式は、3つの異なるエンコーディング方式を使用する。即ち、
図6のトランスコーディングルール630は、
図6の現在のエンコーディングバッファ620及び前のエンコーディングバッファ625が任意の他のエンコーディング方式のペアを使用してエンコーディングされたデータを含む場合に、データをトランスコーディングする方法を指定することができる。
【0129】
表7において、Pは
図1のホストコンピュータ105に関心を有するデータを示し、DCはホストコンピュータ105に関心を有していないデータを示す。(データが関心を有すること又は関心を有していないことを識別する方法は、後述する
図11を参照して更に説明する。)変数(例えば、x、y、又はz)が使用されている場合、これらの変数は、
図1のホストコンピュータ105に関心を有するか又は関心を有していない値の数のカウントを示す。例えば、「[g、BP]P(x)、DC(y)、P(z)」(ルール7及びルール9で使用される)の表現は、ビットパッキングを使用してデータがエンコーディングされたことを示す。即ち、グループのスタート部分に関心があるxの値、グループの中間部分には関心がないyの値、及びグループのエンド(end)に関心があるzの値をグループが含む。x、y、z、g、及びGは、「g×G=x+y+z、1≦g≦63、x mod G=0、y mod G=0、z mod G、y≠0及びパック値当たりビット数で割ったy≧16」のような制約条件を満たさなければならない。最後に、(出力カラムで)PEBは、ルールがアプリケーションのために選択される場合、前のエンコーディングバッファ625に格納された全てのものが出力ストリームに出力されることを表す。表7は、任意のデータがインデックスマッパー615によって既にマッピングされた状況を考慮する。従って、
図8の出力辞書810に対応する値を含む。
【0130】
【0131】
上記の説明は、一般的に、データ対してトランスコーディングがどのように遂行されるかを説明する。しかし、データがカラムフォーマットで格納される場合、カラムフォーマットは、トランスコーディングを有用に活用する。この活用を説明する前に、カラムフォーマットを理解することが有用である。説明の目的のため、カラムフォーマットを、SSDを参照して説明するが、本発明の実施形態は、カラムフォーマットを利用する他のストレージ装置を含み得る。
【0132】
図9は、カラムフォーマットで格納されたファイルの一例を示す図である。
図9にはファイルを示す。ファイルは、ファイルのメタデータ905及びカラムチャンク(910-1、910-2、及び910-3)を含む。
図9は、3つのカラムのチャンク(910-1~910-3)を示しているが、本発明の実施形態は、限定なしに任意の数(0以上)のチャンクを含み得る。
【0133】
ファイルメタデータ905は、ファイルに関連付けられたメタデータを含む。他のメタデータも格納されるが、
図9は、ファイルブロックマップ915及び辞書ページ920を含むファイルのメタデータ905を示す。辞書ページ920は、上述した表1に示した辞書のようなファイルのデータ内の値をエンコーディングするのに使用される辞書である。辞書ページ920は、また例えば1つの辞書は国名を格納し、他の辞書は性(Surnames)を格納するというように、ファイル内の他のデータをエンコーディングするために使用可能な多重辞書を格納することができる。
【0134】
ファイルブロックマップ915は、個々のカラムチャンク(910-1、910-2、及び910-3)を格納するブロックだけでなく、それらの相対的な順序を識別する。ファイルブロックマップ915は、また各カラムチャンク(910-1、910-2、及び910-3)内のデータページの順序を指定するか、又はページの順序がカラムチャンク(910-1、910-2、及び910-3)内で指定される。ファイルブロックマップ915は、
図5のファイルブロックマップ530が
図1のストレージ装置120に格納された全てのファイルを格納するためにいくつかのブロックが使用されるかに対する情報を提供するという点と、ファイルブロックマップ915は、
図9に示したファイルを格納するためにどのブロックが使用されるかに対する情報を提供するという点とを除いて、
図5のファイルブロックマップ530と類似である。(勿論、ファイルブロックマップの全てが共に使用される。即ち、
図5のファイルブロックマップ530は各ファイルに対するファイルメタデータ905を格納するブロックを探し出すのに使用され、ファイルのメタデータ905のファイルブロックマップ915はファイルに対するカラムチャンクを格納するカラムチャンクの貯蔵位置を見つけるために使用される。)
【0135】
一般的に、単一のカラムチャンクは多数のブロックにまたがり、単一のブロックは多数のカラムチャンクを格納する。データが格納された位置、及びそのデータが示す内容(例えば、そのデータが含まれるファイル)を識別できるある方法が存在する限り、データ格納に対するより一般的な解決策には殆ど問題がない。しかし、この説明の目的として、カラムチャンクが単一のブロックに適しており、ブロックがカラムチャンクを共有していない状況を考慮することにする。従って、カラムチャンク(910-1、910-2、及び910-3)の各々は、別途のブロックに格納される。
【0136】
第1のカラムチャンク910-1の内(第2及び第3のカラムチャンク(910-2及び910-3)も同様である)には、辞書ページ925及びデータページ(930-1、930-2、及び930-3)が存在する。
図9は、3つのデータページを示すが、本発明の実施形態は、カラムチャンク内の任意の数(0又はそれ以上)のデータページを含む。データページは、ファイルの実際のデータを個々のページに合う単位に分けて格納する。
【0137】
辞書ページ925は、カラムチャンク910-1内のデータに使用される辞書を格納する。辞書ページ920のように、辞書にページ925は、ファイル内の異なるデータをエンコーディングするために使用される多数の辞書を格納する。
【0138】
ここで、なぜ
図9で辞書のページ920及び辞書のページ925の両方を示すか疑問が提起される。その理由は、辞書ページ(920及び925)が異なるカラムフォーマットの実装として使用されるからである。例えば、1つのカラムストレージフォーマットは、辞書ページ920に格納されるファイル全体に対して単一の辞書を使用する。しかし、他のカラムのフォーマットは、各カラムのチャンク(910-1、910-2、及び910-3)で個々の辞書のページ925を使用する。辞書ページ925を使用する利点は、特定のカラムチャンクが辞書を使用しないか、又は特定の値が特定のカラムのチャンク内のデータに使用されない場合、このような情報が辞書ページ925で省略されて辞書ページ925のサイズを減らすことができる(又は完全に除去)。しかし、一方で、他のカラムのチャンクの多数の辞書ページ925は、データの複製を引き起こすことがある。即ち、同一の辞書項目が多数のカラムチャンクに使用され得る。これが、辞書ページ(920及び925)が点線で示される理由であり、使用されるカラムストレージフォーマットに基づいていずれか1つが省略されることもある。(実際にはファイルが辞書を全く使用していない可能性もあり、この場合には、辞書のページ(920及び925)は、全て省略される。)
【0139】
今、カラムフォーマットを説明したため、カラムフォーマットを使用するストレージ装置内の
図4のトランスコーダ420を使用するための適応に対する説明が可能である。
図10は、カラムフォーマットで格納されたデータに対するトランスコーディングを実装する
図1のストレージ装置120を示す図である。
図10に示すように、ストレージ装置120は、ホストインターフェースレイヤ505、ストレージ装置のコントローラ510、及びストレージ515を含み、これらの機能は、上述した
図5を参照して説明したものと同様に機能する(ストレージ装置120は、SSD、ハードディスクドライブ、又はカラムフォーマットを使用する任意の他のストレージ装置である)。
【0140】
ストレージ装置120は、またインストレージコンピュータコントローラ1005、カラムチャンクプロセッサ1010、及びインストレージコンピュータ315を含む。インストレージコンピュータコントローラ1005は、インストレージコンピュータ315及びカラムチャンクプロセッサ1010に伝送される情報を管理する。例えば、
図1のホストコンピュータ105はストレージ装置120が特定の国の市民の数をカウントするようないくつかのアクセラレーション機能を遂行することを要請し、インストレージコンピュータコントローラ1005は属性(関心国識別)をカラムチャンクプロセッサ1010に提供する。インストレージコンピュータコントローラ1005は、またストレージ515からのデータ、特にカラムチャンクにアクセスしてそのデータをカラムチャンクプロセッサ1010に提供する。インストレージコンピュータコントローラ1005は、またデータに使用されるエンコーディング方式を決定し(ハイブリッドエンコーディング方式ではなく、カラムチャンクやファイル全体を使用するために、単一のエンコーディング方式が使用されると仮定する)、カラムチャンクプロセッサ1010にエンコーディングタイプを提供する。最後に、インンストレージコンピュータコントローラ1005は、再びカラムチャンクプロセッサ1010からトランスコーディングされたデータを受信し、
図1のホストコンピュータ105からの要請に対して適切にそのトランスコーディングされたデータを(
図1のホストインターフェースレイヤを介して)
図1のホストコンピュータ105やインストレージコンピュータ315に返還する。カラムチャンクプロセッサ1010の構造や動作は下の
図11を参照して説明する。
【0141】
インストレージコンピュータコントローラ1005及びカラムチャンクプロセッサ1010は、他の可能性の中でも、適切にプログラムされた汎用プロセッサ、FPGA、ASIC、GPU、又はGPGPUを使用して実装される。インストレージコンピュータコントローラ1005及びカラムチャンクプロセッサ1010は、同一のハードウェア又は他のハードウェアを使用して実装され(例えば、インストレージコンピュータコントローラ1005はASIで実装される一方、カラムチャンクプロセッサ1010はFPGAで実装される)、それらは、単一のユニット又は個々の構成要素として実装される。
【0142】
図11は、カラムフォーマットで格納されたデータに対するトランスコーディンを実施する
図10のカラムチャンクプロセッサ1010を示す図である。
図11を参照すると、カラムチャンクプロセッサ1010は、入力ストリーム、エンコーディングタイプ、及び属性を入力として受信し、出力ストリームを出力として生成する。入力ストリームは、入力バッファ1105に格納される。入力ストリームは、カラムチャンクからの単一のデータページであるか、或いはカラムチャンク内の全てのデータである。入力バッファ1105からのデータは、(
図6を参照して上述したように、)入力ストリームとしてトランスコーダ420に提供される。即ち、トランスコーダ420は、また
図10で説明したように、
図10のインストレージコンピュータコントローラ1005からエンコーディングタイプを受信する。トランスコーダ420は、
図6のサーキュラーバッファ605を含むため、入力バッファ1105は、省略され得ることに留意しなければならない。即ち、データは、
図6のストリームスプリッタ610が動作するように
図6のサーキュラーバッファ605に格納される。しかし、本発明のいくつかの実施形態では、
図6のサーキュラーバッファ605は、全体のデータページ又はカラムチャンクを格納するのに十分に大きくない可能性がある(又はデータが、
図6のサーキュラーバッファ605から除去されるよりも速く入力ストリームがデータを提供する)。この場合、入力バッファ1105は、
図6のサーキュラーバッファ605に直ぐに適合しなくなるデータのための一時的な記憶ストレージ空間として動作する。
【0143】
トランスコーダ420の出力(
図6を参照して説明した出力ストリーム)は、出力バッファ1110に格納される。再び、トランスコーダ420によって生成される間、データが目的地に直接伝送されるが、完全なデータページ又はカラムチャンクのような特定の単位でデータを伝送することが有用である。このような状況で、出力バッファ1110は、適切なデータ単位が生成されるまで出力ストリームを格納する。その時点で、カラムチャンクプロセッサ1010は、要請されたトランスコーディングに適するように出力ストリームを、
図10のインストレージコンピュータコントローラ1005に伝送したり、
図1のホストコンピュータ105に伝送したりする。
【0144】
インデックスマッパー615(
図11でトランスコーダ420の外部に示しているが、インデックスマッパー615は、
図6に示すようにトランスコーダ420の一部であり得る)は、属性評価器1115及びドントケア評価器1120から情報を受信する。属性評価器1115は、
図10のインストレージコンピュータコントローラ1005から属性を受信し、関心のあるデータを決定するために属性を使用する。比較演算子は、
図8の入力辞書805(
図9の辞書ページ(920、925)のいずれか1つである)でどのような値が
図1のホストコンピュータ105に関心を有しているかを識別するために、属性評価器1115によって使用される。ドントケア評価器は、関心のないデータを識別するため、類似するように(しかし、ミラー(mirror)の形態で)動作する。属性評価器1115及びドントケア評価器1120は、相補的に動作するため、両方の評価器のうちのいずれか1つを使用することが可能であるとの点に留意しなければならない(1つの評価器に対する基準を満たしていないデータは、結果的に、他の評価器の基準に適合する)。従って、属性評価器1115及びドントケア評価器1120のいずれかは、省略され得る。この情報は、属性評価器1115及びドントケア評価器1120によってインデックスマッパー615に提供され、インデックスマッパー615は、
図8の入力辞書805から
図8の出力辞書810へのマッピングを確立する。
【0145】
一例として、米国の市民を含むデータセットの項目数をカウントするための
図6のホストコンピュータ105からのクエリ(query)を再検討する。このクエリが到着すると、属性が抽出される(例えば:「国籍=米国」、属性の正確なフォーマットは、データセットのフォーマット及びクエリの提出に使用されるアプリケーションに応じて異なる)。
図8の入力辞書805の検査(表1に示すような)は、「米国」を「3」の値に置き換えるのに使用される。従って、インデックスマッパー615に提供された属性は「国籍=3」を指定し、その次にインデックスマッパー615は、
図8の出力辞書810(表2に示すような)と、表3に示したマップを生成する。
【0146】
属性評価器1115の結果は、また
図6のトランスコーディングルール630の構成に使用するため、トランスコーダ420に提供されることに留意しなければならない。
図6のトランスコーディングルール630は
図1のホストコンピュータ105が関心のあるデータを知ることに依存するため、
図6のトランスコーディングルール630は、属性評価器1115の結果を使用するように適応される。例えば、表7に示したルールを再び考慮すると、属性評価器1115の結果(又は
図8の入力辞書805から出力辞書810へのマップ(表3に説明した))は、多様なルールでPとDCに対する適切な値を設定するのに使用される。
【0147】
また、
図11において、属性(predicate)は、入力ストリームとしてトランスコーダ420に入力される全てのデータに適用されることに留意しなければならない。属性は
図1のホストコンピュータ105がクエリを提出するデータセット全体に適用されるものとして結論を出すことが合理的であるが、トランスコーダ420は、入力ストリームがデータセットの一部を示すとしても、入力ストリームを完全なものとみなす。例えば、カラムチャンクプロセッサ1010は、トランスコーダ420を使用するそれ自身の「入力ストリーム」として
図9の各データページ(930-1、930-2、及び930-3)をプロセッシングする。トランスコーダ420は、入力ストリームが示すことを知らないため、このプロセスは、問題なく動作する。
【0148】
図12A~
図12Cは、本発明の一実施形態によるデータをトランスコーディングする
図4及び
図6のトランスコーダ420の手順の一例のフローチャートである。
図12Aのブロック1205で、
図6のトランスコーダ420は、入力ストリームから未だ受信されるデータがあるか否かをチェックする。一般的に、この入力ストリームは任意のソースから出力されるが、
図9~
図11で先立って説明したように、この入力ストリームはデータがカラムフォーマットで格納されるときのカラムチャンクからのデータページである。入力ストリームから受信する残りのデータがもはや存在しない場合、ブロック1210で、
図6のトランスコーダ420は、
図6の前のエンコーディングバッファ625又は
図6の現在のエンコーディングバッファ620のいずれかに残っているトランスコーディングされたデータがあるか否かをチェックする。
図6の前のエンコーディングバッファ625又は
図6の現在のエンコーディングバッファ620のいずれかにトランスコーディングされたデータが残っている場合、
図6の前のエンコーディングバッファ625からトランスコーディングされたデータが出力ストリームに出力され、続いて、
図6の現在のエンコーディングバッファ625からトランスコーディングされたデータが出力される。殆どの状況では、ルール評価器635が
図6の現在のエンコーディングバッファ620のデータに対して動作するため、
図6の現在のエンコーディングバッファ620には何も存在してはならない。
図6のトランスコーディングルール630を適用した結果として(例えば、表7のルール6~9に示すように)、
図6の現在のエンコーディングバッファ620にデータが残る状況でも、
図6のルール評価器635は、
図6のトランスコーダ420が入力ストリームから新たなデータを見つける前(
図6のサーキュラーバッファ605及び
図6のストリームスプリッタ610を介して)に、そのデータに対して動作する。即ち、
図6のトランスコーダ420は、入力ストリームで次のデータチャンクをプロセッシングしようと試みる前に、
図6の現在のエンコーディングバッファ620がクリアされるときを待機する。しかし、トランスコーディングされたデータが、
図6の現在のエンコーディングバッファ620に残っている場合は、トランスコーディングされたデータは、出力ストリームに出力される。ブロック1215で、全てのデータが出力ストリームに出力されると、プロセッシングは終了する(
図6のトランスコーダ420が新たな入力ストリームをプロセッシングすると予想されるまで)。
【0149】
入力ストリームからプロセッシングするデータがまだあると仮定すると、ブロック1220で、
図6のサーキュラーバッファ605が入力ストリームから次のエンコーディングデータを受信し、その後、
図6のストリームスプリッタ610は、エンコーディングデータで第1のチャンクを識別し、そのチャンクを
図6のインデックスマッパー615に伝達する。(
図6のインデックスマッパー615が
図6のルール評価器635の効果的な一部として提供される本発明の実施形態では、
図6のストリームスプリッタ610は、エンコーディングデータチャンクを
図6の現在のエンコーディングバッファ620に配置する。ブロック1225で、
図6のインデックスマッパー615(又は
図6のルール評価器635)は、データチャンクが関心あるか否かを決定する。より具体的には、データチャンクが
図1のホストコンピュータ105によって要請されたデータを含むか否かに従う(例えば、属性から)。
【0150】
エンコーディングデータチャンクが、
図1のホストコンピュータ105の関心のあるデータを含む場合、
図1のブロック1230(
図12B)で、
図6のインデックスマッパー615(又は
図6のルール評価器635)は、チャンクに有る任意のデータを再びエンコーディングするために、
図8の入力辞書805から
図8の出力辞書810へのマップを使用する。ブロック1235で、
図6のルール評価器635は、
図6の前のエンコーディングバッファ625でトランスコーディングされたデータが
図1のホストコンピュータ105に関心を有するか否かをチェックする。そうでない場合(そして現在のチャンクが
図12Aのブロック1225で決定されたように、
図1のホストコンピュータ105に関心のあることを思い出す場合)、ブロック1240で、
図6のトランスコーダ420は
図6の前のエンコーディングバッファ625でトランスコーディングされたデータを出力ストリームに出力し、そしてブロック1245で、
図6のトランスコーダ420は現在のトランスコーディングされたチャンクを
図6の前のエンコーディングバッファ625に格納した後、手順は
図12Aのブロック1205にリターンする。
【0151】
一方、ブロック1235で決定されたように、
図6の前のエンコーディングバッファ625がまた
図1のホストコンピュータ105に関心のあるデータを格納した場合、ブロック1250で、
図6のルール評価器635は、現在のチャンク及び
図6の前のエンコーディングバッファ625のトランスコーディングされたチャンクが同一のエンコーディング方式を使用するか否かを決定する。そうでない場合、ブロック1255で、
図6のルール評価器635は、チャンクのうちのいずれか(
図6の現在のエンコーディングバッファ620のチャンク又は
図6の前のエンコーディングバッファ625のチャンク)により使用されているエンコーディング方式を変更する。(2つ以上のエンコーディング方式が使用される状況で、
図6のルール評価器635は、
図6の現在のエンコーディングバッファ620及び
図6の前のエンコーディングバッファ625の両方のチャンクに使用されるエンコーディング方式を変更する。)次に、
図6の現在のエンコーディングバッファ620及び
図6の前のエンコーディングバッファ625の両方のチャンクが同一のエンコーディング方式を使用していると知られると、ブロック1260で、
図6のルール評価器635は、2つのチャンクを単一のチャンクに結合する。これは、
図6の前のエンコーディングバッファ625に格納され、その後の手順は、
図12Aのブロック1205にリターンする。
【0152】
図12Bは、現在のチャンクが2回トランスコーディングされることを示す。即ち、ブロック1230で1回(値が
図8の出力辞書810に対応するようにアップデートされるとき)、及びブロック1255で1回(現在のチャンクのエンコーディング方式が変更される場合に、エンコーディング方式から別のエンコーディング方式に変更されるとき)である。この2つの作業を個別に遂行するが、2つの作業を結合することもできる。即ち、同時にエンコーディング方式を変更して、値をアップデートすることもできる。本発明の実施形態は、これらの動作を個別に、そして単一の段階として遂行することを含む。
【0153】
また、現在のチャンクが
図1のホストコンピュータ105に関心のある場合に遂行される動作を説明する
図12Bを思い出すと(
図12Aのブロック1225で決定されたように)、現在のチャンクが
図1のホストコンピュータ105の関心がない場合(
図12Aのブロック1225で決定されたように)、ブロック1265(
図12Cの)で、
図6のインデックスマッパー615(又は
図6のルール評価器635)は、チャンクの全てのデータを再びエンコーディング(特に、ドントケアの値に)するために、
図8の入力辞書805から
図8の出力辞書810へのマップを使用する。ブロック1270で、
図6のルール評価器635は、
図6の前のエンコーディングバッファ625でトランスコーディングされたデータが
図1のホストコンピュータ105に関心があるかをチェックする。そうである場合(
図12Aのブロック1225で決定されたように、現在のチャンクが
図1のホストコンピュータ105に関心がないことを思い出す場合)、ブロック1275で、
図6のトランスコーダ420は
図6の前のエンコーディングバッファ625でトランスコーディングされたデータを出力ストリームに出力し、ブロック1280で、
図6のトランスコーダ420は、
図6の前のエンコーディングバッファ625に現在のトランスコーディングされたチャンクを格納し、その後の手順は、
図12Aのブロック1205にリターンする。
【0154】
一方、ブロック1270で決定されたように、
図6の前のエンコーディングバッファ625がまた
図1のホストコンピュータ105に関心のないデータを格納する場合、ブロック1285で、
図6のルール評価器635は、現在のチャンクと
図6の前のエンコーディングバッファ625のトランスコーディングされたチャンクとが同一のエンコーディング方式を使用するか否かを決定する。同一のエンコーディング方式ではない場合、ブロック1290で、
図6のルール評価器635は、チャンクのうちのいずれか(
図6の現在のエンコーディングバッファ620のチャンク又は
図6の前のエンコーディングバッファ625のチャンクのいずれか1つ)によって使用されるエンコーディング方式を変更する。(2つ以上のエンコーディング方式が使用される状況で、
図6のルール評価器635は、
図6の現在のエンコーディングバッファ620及び
図6の前のエンコーディングバッファ625の両方のチャンクに使用されるエンコーディング方式を変更する)。次に、
図6の現在のエンコーディングバッファ620及び
図6の前のエンコーディングバッファ625の両方のチャンクが同一のエンコーディング方式を使用すると知られると、ブロック1295で、
図6のルール評価器635は2つのチャンクを単一のチャンクに結合し、これは
図6の前のエンコーディングバッファ625に格納され、その後の手順は、
図12Aのブロック1205にリターンする。
【0155】
図12Cは、現在のチャンクが2回トランスコーディングされることを示す。即ち、ブロック1265で1回(値が
図8の出力辞書810に対応するようにアップデートされるとき)及びブロック1290で1回(現在のチャンクのエンコーディング方式が変更される場合に、エンコーディング方式から別のエンコーディング方式に変更されるとき)この2つの作業を個別に遂行するが、2つの作業を結合することもできる。即ち、同時にエンコーディング方式を変更して値をアップデートすることもできる。本発明の実施形態は、これらの動作を個別にそして単一の段階として遂行することを含む。
【0156】
図12A~12Cの全体に亘って、
図6の前のエンコーディングバッファ625にいくつかのデータが存在するという暗黙の仮定が存在する。例えば、ブロック(1235及び1270)は、
図6の前のエンコーディングバッファ625にいくつかのデータがある状況を説明する。結合されるデータチャンクの結合をサポートするために、トランスコーディングされたデータが
図6の前のエンコーディングバッファ625にバッファリングされるため、これは一般的に合理的な仮定である(データが既に出力ストリームに出力された場合に、チャンクの結合を試みるのには遅すぎる)。しかし、
図6の前のエンコーディングバッファ625に格納されたデータがない状況が有り得る。一例として、入力ストリームの1番目のチャンクがプロセッシングされるとき、前のエンコーディングのバッファ625には、データが全く存在しない(その入力ストリームよりも前にプロセッシングされたことがないため)。
【0157】
第2の例として、データチャンクの結合をサポートしないエンコーディング方式が有るが、この場合、
図6の前のエンコーディングバッファ625に前のチャンクを格納するのに全く値がない。
図6の前のエンコーディングバッファ625にデータがない場合に、
図6の前のエンコーディングバッファ625で、現在のチャンクと(存在しない)チャンクとの比較、又は
図6の前のエンコーディングバッファ625から(存在しない)チャンクを出力することはなんの意味もない。簡単な解決策は、
図6の前のエンコーディングバッファ625にデータがない場合、従って前のエンコーディングバッファ625でのデータの存在に依存する何ものも遂行されない。従って、例えば
図12Bにおいて、前のエンコーディングバッファ625にデータがない場合、プロセッシングは、ブロック1230からブロック1245に直接ジャンプし(
図6の前のエンコーディングバッファ625で現在のトランスコーディングされたチャンクをバッファリングするために)、
図12Cで、プロセッシングは、ブロック1265からブロック1280に直接ジャンプする(
図6の前のエンコーディングバッファ625で現在のトランスコーディングされたチャンクをバッファリングするために)。
【0158】
図12B及び
図12Cの綿密な検討を介して両者の間の差が比較的少ないことが分かる。注目すべき若干の違いは、ブロック(1230及び1265)、及びブロック(1235及び1270)から離れる異なるブランチにある。実際に、これらの違いさえも比較的意味は小さい。即ち、ブロック(1230及び1265)は、全て
図8の出力辞書810に基づく再エンコーディングに関する(ブロック1265は、「ドントケア」の値の使用を具体的に命名する)。そして、ブロック(1235及び1270)から離れるブランチが違うようにラベルを付けられているが、その理由は、ブロック(1235及び1270)は、現在のチャンクが前のチャンクに結合されるか否かを決定することに関するからである。これにより、
図12B及び
図12Cは、動作シーケンスに関連して若干の明確性の損失を甘受しながら理論的に結合される。
【0159】
図13は、入力エンコーディングデータをチャンクに分割する
図6のストリームスプリッタ610の手順の一例のフローチャートである。
図13を参照すると、ブロック1305で、
図6のストリームスプリッタ610は、(
図1のストレージ装置120内の
図3のストレージ305に起因する)入力エンコーディングデータを受信し、これは、
図11の入力バッファ1105や
図6のサーキュラーバッファ605のようなバッファにバッファリングされる。ブロック1310で、
図6のストリームスプリッタ610は、入力エンコーディングデータをチャンクに分ける。ブロック1315で、
図6のストリームスプリッタ610は、チャンクを
図6のトランスコーダ420に伝送する(又は、
図6のインデックスマッパー615又は
図6の現在のエンコーディングバッファ620に)。
【0160】
図14A~
図14Bは、本発明の一実施形態によるカラムフォーマットで格納されたデータをトランスコーディングする
図10のカラムチャンクプロセッサ1010及び/又は
図4及び
図6のトランスコーダ420の手順の一例のフローチャートである。
図14A~
図14Bは、また少なくとも1つの実施形態で、
図6のストリームスプリッタ610がどのように
図13のブロック1305で説明したように入力エンコーディングデータを受信するかに対する拡張された例を示す。
【0161】
図14Aのブロック1405で、
図10のカラムチャンクプロセッサ1010は、ファイルのために
図9のファイルブロックマップ915(又は代案的に又は累積的に、
図5のファイルブロックマップ530)にアクセスする。ブロック1410で、
図10のカラムチャンクプロセッサ1010は、
図9のファイルメタデータ905とその後に
図9の辞書ページ920とを見つけるために、
図9のファイルブロックマップ915を使用する。
図9の各々のカラムチャンク(910-1、910-2、及び910-3)が
図9の独自の辞書ページ925を含む場合、
図9の辞書ページ925は、
図9のファイルメタデータ905から省略され、この場合、ブロック1410は、点線1415で示したように省略される。その次に、
図9のファイルブロックマップ915を使用して、ブロック1420で、
図10のカラムチャンクプロセッサ1010は、ファイルのカラムチャンクを識別する(これは、
図1のストレージ装置120に格納されたデータのブロックである)。
【0162】
ブロック1425(
図14B)で、
図10のカラムチャンクプロセッサ1010は、アクセスするより多くのカラムチャンク(ブロック)があるか否かを判定する。そうでない場合(カラムチャンクがもはや存在しない場合)、プロセッサは終了する。一方(カラムチャンクが存在する場合)、ブロック1430で、
図10のカラムチャンクプロセッサ1010は、
図9のカラムチャンク(910-1、910-2、又は910-3)から
図9の辞書ページ925にアクセスする。
図9のファイルメタデータ905が
図9の辞書ページ920を格納する場合、
図9のカラムチャンク(910-1、910-2、及び910-3)は、
図9の辞書ページ925を省略することができるが、これは点線1435で示したようにブロック1430が省略される。ブロック1440で、
図10のカラムチャンクプロセッサ1010は、
図9のカラムチャンク(910-1、910-、2及び910-3)から
図9のデータページ(930-1、930-2、及び930-3)にアクセスする。ブロック1445で、
図10のカラムチャンクプロセッサ1010は、
図8の入力辞書805とカラムチャンクのための
図9のデータページ(930-1、930-2、及び930-3)とを、
図6のトランスコーダ420、
図6のストリームスプリッタ610、又は
図6のインデックスマッパー615に(順番に)伝達する。
【0163】
図15は、本発明の一実施形態による
図8の入力辞書805を出力辞書810にマッピングする
図6のインデックスマッパー615の手順の一例のフローチャートである。
図15を参照すると、ブロック1505で、
図6のインデックスマッパー615は、
図8の入力辞書805を受信する(例えば、
図10のカラムチャンクプロセッサ1010から)。ブロック1510で、
図6のインデックスマッパー615は、
図8の入力辞書805でどのようなデータが関心対象であるかを決定する。
図6のインデックスマッパー615は、例えばおそらく
図10のインストレージコンピュータコントローラ1005を経由して
図1のホストコンピュータ105から提供される属性を使用して、このような決定をする。ブロック1515で、
図6のインデックスマッパー615は、
図8の出力辞書810を生成する。出力辞書810は、
図1のホストコンピュータ105の全ての関心のある項目を含むが、
図1のホストコンピュータ105に関心のない全ての項目を1つの「ドントケア」の値に統合する。ブロック1520で、
図6のインデックスマッパー615は、
図8の入力辞書805から
図8の出力辞書810への値をマッピングする。最後に、ブロック1525で、
図8のインデックスマッパー615は、
図8の出力辞書810を出力する。
【0164】
図16A~
図16Bは、
図1のホストコンピュータ105から受信された属性を管理してトランスコーディングされたデータに対するアクセラレーション機能を潜在的に遂行する
図10のインストレージ(in-storage)コンピュータコントローラ1005の手順の一例のフローチャートである。
図16Aのブロック1605で、
図10のインストレージコンピュータコントローラ1005は、
図1のホストコンピュータ105から属性を受信する。ブロック1610で、
図10のインストレージコンピュータコントローラ1005は、クエリにカバーされるエンコーディングデータを得るために
図8の入力辞書805にアクセスする。ブロック1615で、
図10のインストレージコンピュータコントローラ1005は、属性によってカバーされる
図8の入力辞書805で項目を識別する(即ち、
図1のホストコンピュータ105に関心のある
図8の入力辞書805の項目)。ブロック1620で、
図10のインストレージコンピュータコントローラ1005は、属性によってカバーされる項目を含む
図8の出力辞書810を生成する。ブロック1625で、
図10のインストレージコンピュータコントローラ1005は、属性によってカバーされる
図8の入力辞書805の項目を
図8の出力辞書810の項目にマッピングする。
【0165】
ブロック1630で、
図10のインストレージコンピュータコントローラ1005は、
図8の入力辞書805で属性によってカバーされない項目を識別する(即ち、
図1のホストコンピュータ105に関心のない
図8の入力辞書805の項目)。ブロック1635で、
図10のインストレージコンピュータコントローラ1005は、
図8の出力辞書810に「ドントケア」の項目を追加する。ブロック1640(
図16B)で、
図10のインストレージコンピュータコントローラ1005は、属性によってカバーされない入力辞書805の項目を
図8の出力辞書810の「ドントケア」の項目にマッピングする。
【0166】
ブロック1645で、
図6のルール評価器635(
図6のトランスコーダ420内の)は、
図1のホストコンピュータ105からのクエリに応じて、
図6のトランスコーディングルール630を適応させるために属性を使用する。ブロック1650で、
図6のインデックスマッパー615及び
図6のルール評価器635(潜在的に、
図6のトランスコーダ420内に全て位置する)は、入力ストリームから出力ストリームにエンコーディングデータをトランスコーディングするために、
図8の入力辞書805から
図8の出力辞書810へのマップ及び
図6のトランスコーディングルール630を使用する(
図12A~12Cを参照して上述したように)
【0167】
この時点で、多様なオプションが存在する。ブロック1655に示すように、
図10のインストレージコンピュータコントローラ1005は、
図6のトランスコーダ420から出力ストリームを受信し、トランスコーディングされたデータを
図1のホストコンピュータ105に伝達し、ブロック1660で、
図10のインストレージコンピュータコントローラ1005は、
図8の出力辞書810を
図1のホストコンピュータ105に伝送する。或いは、ブロック1665で、
図10のインストレージコンピュータコントローラ1005は、出力ストリームのデータに対するアクセラレーション機能を適用し、ブロック1670で、
図10のインストレージコンピュータコントローラ1005は、アクセラレーション機能の結果を
図1のホストコンピュータ105に伝送する。
【0168】
図12A~16Bを参照すると、本発明のいくつかの実施形態が示される。しかし、当業者は、ブロックの順序を変更したり、ブロックを省略したり、図示していないリンクを含んだりすることにより、本発明の他の実施形態も可能であることを認識することができる。フローチャートに対するこのような全ての変形は、明示的に説明するかしないかに拘らず、本発明の実施形態とみなされる。
【0169】
本発明の実施形態は、従来技術に比べて技術的な利点を提供する。従来のシステムにおいて、デコーディングされたデータは、
図1のホストコンピュータ105に伝送される。
図1のホストコンピュータ105に伝送されたデータが選択的であっても、(即ち、
図1のホストコンピュータ105に伝送されるデータは、関心のあるデータを含む)、データは相変わらず圧縮又はエンコーディングせずに伝送され、これは空間の節約が選択性を通して達成されることを意味する。対照的に、ストレージの減少の大部分は、圧縮ではなくエンコーディングを使用してなされるため、エンコーディングデータを
図1のホストコンピュータ105に伝送することは、一般的にデコーディングされたデータを
図1のホストコンピュータ105に伝送するよりも少ないデータを伝送することを伴う。なお、データは1つのエンコーディング方式から他のエンコーディング方式にトランスコーディングされるため、
図6のトランスコーダ420を使用することは、別途の動作でデータをデコーディングしてデータを再エンコーディングするよりも、より効率的である。
【0170】
次の説明は、本発明の特定の実施態様が実現される適切なマシンに対して簡単で一般的な説明を提供するものである。マシン又はマシン群は、キーボード、マウスなどのような従来の入力装置からの入力だけでなく、他のマシンから受信した指令、仮想現実(VR)環境との相互作用、生体フィードバック、又は他の入力信号によって少なくとも部分的に制御される。本明細書で使用する用語の「マシン」は、単一のマシン、仮想マシン、又は通信的に結合されたマシン群、仮想マシン群、若しくは共に動作する装置のシステムを広範に含むものと意図される。例としてのマシンは、パーソナルコンピュータ、ワークステーション、サーバ、ポータブルコンピュータ、ハンドヘルド装置、電話、タブレットなどのコンピューティング装置だけでなく、個人又は公共交通機関(例えば、自動車、電車、タクシーなど)のような輸送装置を含む。
【0171】
マシン又はマシン群は、プログラム可能な又はプログラム不可能な論理装置又はアレイ、ASIC(Application Specific Integrated Circuit)、エンベデッドコンピュータ、スマートカードのようなエンベデッドコントローラを含む。マシン又はマシン群は、ネットワークインターフェース、モデム、又は他の通信結合を介するように1つ以上の多くのリモートマシン群に対して1つ以上の多くの連結を活用することができる。マシン群は、イントラネット、インターネット、LAN(local area networks)、WAN(wide area networks)などのような物理及び/又は論理ネットワークの手段として互いに連結される。この分野における熟練した者は、ネットワーク通信が多様な有線及び/又はワイヤレス近距離又は遠距離キャリア及びワイヤレス周波数(RF)、衛星、マイクロウェーブ、IEEE802.11、ブルートゥース(登録商標)、光学、赤外線、ケーブル、レーザーなどを含むプロトコルを活用することを理解するだろう。
【0172】
本発明の技術的思想の実施形態は、マシンによってアクセスされるときに、マシンが作業を遂行するか、又は抽象データタイプ若しくは低レベルのハードウェアコンテキストを定義することを誘発する関数、プロシージャ、データ構造、アプリケーションなどを含む関連付けられるデータを参照又は協力して説明される。関連付けられたデータは、例えば、RAM、ROMなどの揮発性及び/又は不揮発性メモリ、他のストレージ装置、ハードディスクドライブ、フロッピー(登録商標)ディスク、光学ストレージ、テープ、フラッシュメモリ、メモリスティック(登録商標)、デジタルビデオディスク、生体ストレージなどを含む関連付けられるストレージ媒体に格納される。関連付けられたデータは、物理及び/又は論理ネットワークを含む伝送環境を経てパケット、シリアルデータ、パラレルデータ、伝送信号などの形態で伝達され、圧縮又はエンコーディングされたフォーマットで使用される。関連付けられたデータは、分散環境で使用され、マシンアクセスに対してローカル及び/又はリモートで格納される。
【0173】
本発明の技術的思想の実施形態は、1つ以上の多くのプロセッサによって実行可能であり、ここで説明したように、本発明の技術的思想のエレメントを遂行させる命令語を有し、実在する非一時的なマシン読み取り可能な記録媒体を含み得る。
【0174】
上述した方法の多様な動作は、多様なハードウェア及び/又はソフトウェア構成要素、回路及び/又はモジュールのような動作を遂行する任意の適切な手段によって行われる。ソフトウェアは、論理機能を実装するための実行可能な命令の順序付けられたリストを含み、単一若しくは複数のような命令を実行するシステム、装置、シングル若しくはマルチコアプロセッサ、又はプロセッサを含むシステムに関連して使用するための任意の「プロセッサ読み取り可能な記録媒体」として実装される。
【0175】
本明細書に開示した実施形態に関連して説明した方法又はアルゴリズム、及び機能のブロック又は段階は、ハードウェア、プロセッサによって実行されるソフトウェアモジュール、又はこの両方の組み合わせで直接実施され得る。ソフトウェアで実現される場合、機能は、有形の非一時的コンピュータ読み取り可能な記録媒体上に1つ以上の命令語又はコードとして格納されたり、これを介して伝送されたりする。ソフトウェアモジュールは、RAM(Random Access Memory)、フラッシュメモリ、ROM(Read Only Memory)、EPROM(Electrically Programmable ROM)、EEPROM(Electrically Erasable Programmable ROM)、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、又は当業界に公知された任意の他の形態のストレージ媒体に格納される。
【0176】
例示した実施形態を参照して本発明の原理を説明して示したが、例示した実施形態は、そのような原理を逸脱することなく配置され且つ詳細に変更され、任意の所望の方法で組み合わされることを認識するはずである。そして、上述した説明が特定の実施形態に焦点を当てたが、他の構成が考慮される。特に、「本発明の実施形態による」などのような表現が本明細書で使用されても、これらのフレーズは、一般的に実施形態の可能性を参照するためのものであり、本発明を特定の実施形態の構成に限定しようとするものではない。本明細書で使用しているように、これらの用語は、他の実施形態に結合可能な同一又は異なる実施形態を指すことができる。
【0177】
上述した実施形態は、本発明の概念を限定するものと解釈してはならない。いくつかの実施形態を説明したが、当業者は、本発明の新規な教示及び利点を実質的に逸脱せずに、これらの実施形態に対する多くの修正が可能であることを容易に理解するだろう。従って、そのような全ての修正は、本発明の範囲内に含まれるように意図される。
【0178】
本発明の実施形態は、限定なしに次のステートメントへと拡張される。
【0179】
[ステートメント1]
本発明の実施形態によるトランスコーダは、入力エンコーディングデータを格納するバッファと、入力辞書から出力辞書にマッピングするインデックスマッパーと、入力エンコーディングデータ、入力辞書、及び入力辞書から出力辞書へのマップに応答して修正された現在のエンコーディングデータを格納する現在のエンコーディングバッファと、前の入力エンコーディングデータ、入力辞書、及び入力辞書から出力辞書へのマップに応答する修正された前のエンコーディングデータを格納する前のエンコーディングバッファと、現在のエンコーディングバッファに格納された修正された現在のエンコーディングデータ、前のエンコーディングバッファに格納された修正された前のエンコーディングデータ、及びトランスコーディングのルールに応答する出力ストリームを生成するルール評価器と、を備える。
【0180】
[ステートメント2]
本発明の実施形態は、ステートメント1によるトランスコーダを含み、インデックスマッパーは、トランスコーディングのルールに応答する。
[ステートメント3]
本発明の実施形態は、ステートメント1によるトランスコーダを含み、トランスコーディングのルールは、インデックスマッパーに応答する。
[ステートメント4]
本発明の実施形態は、ステートメント1によるトランスコーダを含み、インデックスマッパーは、入力辞書で選択されたサブセットの項目に応答する。
[ステートメント5]
本発明の実施形態は、ステートメント1によるトランスコーダを含み、ルール評価器は、プロセッサ、FPGA(Field Programmable Gate Array)、ASIC(Application-Specific Integrated Circuit)、GPU(Graphics Processing Unit)、又は汎用GPU(GPGPU)の中の少なくとも1つを含む。
[ステートメント6]
本発明の実施形態は、ステートメント5によるトランスコーダを含み、ルール評価器は、トランスコーディングのルールを実施するための少なくとも1つのソフトウェア及びトランスコーディングのルールをリストするテーブルを格納するストレージを更に含む。
[ステートメント7]
本発明の実施形態は、ステートメント5によるトランスコーダを含み、ルール評価器は、トランスコーディングのルールを実施するための回路を更に含む。
[ステートメント8]
本発明の実施形態は、ステートメント1によるトランスコーダを含み、ルール評価器は、トランスコーディングのルールを使用して入力エンコーディングデータから修正された現在のエンコーディングデータを生成するように動作する。
[ステートメント9]
本発明の実施形態は、ステートメント8によるトランスコーダを含み、ルール評価器は、修正された前のエンコーディングデータを出力ストリームに追加するように動作する。
[ステートメント10]
本発明の実施形態は、ステートメント9によるトランスコーダを含み、ルール評価器は、現在のエンコーディングバッファから修正されたエンコーディングされた現在のエンコーディングデータを、前のエンコーディングバッファで修正された前のエンコーディングデータに移動させるように追加で動作する。
[ステートメント11]
本発明の実施形態は、ステートメント8によるトランスコーダを含み、ルール評価器は、トランスコーディングのルールを使用して、修正された現在のエンコーディングデータを含むように修正された前のエンコーディングデータを修正するように動作する。
[ステートメント12]
本発明の実施形態は、ステートメント11によるトランスコーダを含み、ルール評価器は、修正された現在のエンコーディングデータを生成するときに入力エンコーディングデータの第1のエンコーディング方式を第2のエンコーディング方式に変更するように追加で動作する。
[ステートメント13]
本発明の実施形態は、ステートメント11によるトランスコーダを含み、ルール評価器は、修正された現在のエンコーディングデータを生成するときに入力エンコーディングデータの第1のエンコーディング方式を第3のエンコーディング方式に変更するように追加で動作する。
[ステートメント14]
本発明の実施形態は、ステートメント8によるトランスコーダを含み、ルール評価器は、入力エンコーディングデータから入力エンコーディングデータの第1のエンコーディング方式を決定するように動作し、少なくとも2つのエンコーディング方式の中の1つである第1エンコーディング方式は、入力エンコーディングデータで使用される。
[ステートメント15]
本発明の実施形態は、ステートメント1によるトランスコーダを含み、第1のエンコーディング方式を使用して入力エンコーディングデータで第1のチャンクを識別し、第2のエンコーディングを使用して入力エンコーディングデータで第2のチャンクを識別するストリームスプリッタを更に含む。
[ステートメント16]
本発明の実施形態は、ステートメント1によるトランスコーダを含み、インデックスマッパーは、入力辞書の少なくとも1つの項目を出力辞書の「ドントケア(don’t care)」の値にマッピングするように動作する。
[ステートメント17]
本発明の実施形態は、ステートメント1によるトランスコーダを含み、インデックスマッパーは「ドントケア」の値を出力辞書に追加するように動作する。
[ステートメント18]
本発明の実施形態は、ステートメント1によるトランスコーダを含み、入力エンコーディングデータは、圧縮された入力エンコーディングデータであり、トランスコーダは、圧縮解除エンジンを更に含む。
[ステートメント19]
本発明の実施形態は、ステートメント1によるトランスコーダを含み、トランスコーダは、入力エンコーディングデータのデコーディングなしに入力エンコーディングデータから出力ストリームを生成するように動作する。
[ステートメント20]
本発明の実施形態は、ステートメント1によるトランスコーダを含み、トランスコーダは、ソリッドステートドライブ(SSD)のストレージ装置に含まれる。
[ステートメント21]
本発明の実施形態は、ステートメント20によるトランスコーダを含み、入力エンコーディングデータは、SSDストレージ装置内のストレージから受信される。
【0181】
[ステートメント22]
本発明の実施形態による方法は、ストレージ装置内のデータに対するトランスコーダの動作方法であって、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第1のデータチャンクを受信する段階と、第1のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、ホストコンピュータの関心対象である第1のデータチャンクに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階と、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第2のデータチャンクを受信する段階と、第2のデータチャンクがホストコンピュータの関心対象ではないことを決定する段階と、ホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階と、第1のエンコーディングデータ及び第2エンコーディングデータをホストコンピュータに出力する段階と、を有する。
【0182】
[ステートメント23]
本発明の実施形態は、ステートメント22による方法を含み、ホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階は、第1のエンコーディングデータの値を「ドントケア(don’t care)」の値に変更する段階を含む。
[ステートメント24]
本発明の実施形態は、ステートメント23による方法を含み、ホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階は、第2のエンコーディングデータを「ドントケア」の値を含む第3のエンコーディングデータに結合する段階を更に含む。
[ステートメント25]
本発明の実施形態は、ステートメント24による方法を含み、ホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階は、第2のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階を含む。
[ステートメント26]
本発明の実施形態は、ステートメント25による方法を含み、第2のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階は、第2のエンコーディングデータの第1のエンコーディング方式を第2のエンコーディングデータの第2のエンコーディング方式に変更する段階を含む。
[ステートメント27]
本発明の実施形態は、ステートメント25による方法を含み、第2のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階は、第3のエンコーディングデータの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階を含む。
[ステートメント28]
本発明の実施形態は、ステートメント22による方法を含み、ホストコンピュータの関心対象である第1のデータチャンクに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階は、第1のエンコーディングデータを第3のエンコーディングデータに結合する段階を含む。
[ステートメント29]
本発明の実施形態は、ステートメント28による方法を含み、ホストコンピュータの関心対象である第1のデータチャンクに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階は、第1のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階を更に含む。
[ステートメント30]
本発明の実施形態は、ステートメント29による方法を含み、第1のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階は、第1のデータチャンクの第1のエンコーディング方式を第1のエンコーディングデータの第2のエンコーディング方式に変更する段階を含む。
[ステートメント31]
本発明の実施形態は、ステートメント29による方法を含み、第1のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階は、第2のエンコーディングデータの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階を含む。
[ステートメント32]
本発明の実施形態は、ステートメント22による方法を含み、ホストコンピュータの関心対象である第1のデータチャンクに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階は、トランスコーディングのルールに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階を含み、ホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階は、トランスコーディングのルールに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階を含む。
[ステートメント33]
本発明の実施形態は、ステートメント22による方法を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第1のデータチャンクを受信する段階は、ストリームスプリッタで、入力エンコーディングデータを受信する段階と、ストリームスプリッタによって、入力エンコーディングデータで、第1のエンコーディング方式を使用してエンコーディングされた第1のデータチャンク及び第2のエンコーディング方式を使用してエンコーディングされた第2のデータチャンクを識別する段階と、ストリームスプリッタから提供された入力エンコーディングデータから第1のデータチャンクを受信する段階と、を含む。
[ステートメント34]
本発明の実施形態は、ステートメント22による方法を含み、この方法は、ストレージ装置から入力辞書を受信する段階と、ホストコンピュータの関心データ及びホストコンピュータの無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階と、出力辞書をホストコンピュータに出力する段階と、を更に含む。
[ステートメント35]
本発明の実施形態は、ステートメント34による方法を含み、ホストコンピュータの関心データ及びホストコンピュータの無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階は、トランスコーディングのルールに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階を含む。
[ステートメント36]
本発明の実施形態は、ステートメント34による方法を含み、ホストコンピュータの関心データ及びホストコンピュータの無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階は、入力辞書で選択された項目のサブセットに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階を含む。
[ステートメント37]
本発明の実施形態は、ステートメント22による方法を含み、トランスコーダは、入力エンコーディングデータのデコーディングなしに入力エンコーディングデータから第1のエンコーディングデータ及び第2のエンコーディングデータを生成するように動作する。
[ステートメント38]
本発明の実施形態は、ステートメント22による方法を含み、トランスコーダは、ソリッドステートドライブ(SSD)のストレージ装置に含まれる。
[ステートメント39]
本発明の実施形態は、ステートメント38による方法を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第1のデータチャンクを受信する段階は、トランスコーダで、SSDストレージ装置内のストレージから入力エンコーディングデータからの第1のデータチャンクを受信する段階を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第2のデータチャンクを受信する段階は、トランスコーダで、SSDストレージ装置内のストレージから入力エンコーディングデータからの第2のデータチャンクを受信する段階を含む。
【0183】
[ステートメント40]
本発明の実施形態の物品は、命令語を格納したコンピュータ読み取り可能な非一時的記録媒体を含む物品であって、マシンによって命令語が実行される方法は、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第1のデータチャンクを受信する段階と、第1のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、ホストコンピュータの関心対象である第1のデータチャンクに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階と、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第2のデータチャンクを受信する段階と、第2のデータチャンクがホストコンピュータの関心対象ではないことを決定する段階と、ホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階と、第1エンコーディングデータ及び第2のエンコーディングデータをホストコンピュータに出力する段階と、を有する。
【0184】
[ステートメント41]
本発明の実施形態は、ステートメント40による物品を含み、ホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2エンコーディングデータを生成する段階は、第1のエンコーディングデータの値を「ドントケア(don’t care)」の値に変更する段階を含む。
[ステートメント42]
本発明の実施形態は、ステートメント41による物品を含み、ホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階は、第2のエンコーディングデータを「ドントケア」の値を含む第3のエンコーディングデータに結合する段階を含む。
[ステートメント43]
本発明の実施形態は、ステートメント42による物品を含み、ホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階は、第2のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階を含む。
[ステートメント44]
本発明の実施形態は、ステートメント43による物品を含み、第2のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階は、第2のデータチャンクの第1のエンコーディング方式を第2エンコーディングデータの第2のエンコーディング方式に変更する段階を含む。
[ステートメント45]
本発明の実施形態は、ステートメント43による物品を含み、第2のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階は、第3のエンコーディングデータの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階を含む。
[ステートメント46]
本発明の実施形態は、ステートメント40による物品を含み、ホストコンピュータの関心対象である第1のデータチャンクに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階は、第1のエンコーディングデータを第3のエンコーディングデータに結合する段階を含む。
[ステートメント47]
本発明の実施形態は、ステートメント46による物品を含み、ホストコンピュータの関心対象である第1のデータチャンクに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階は、第1のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階を更に含む。
[ステートメント48]
本発明の実施形態は、ステートメント47による物品を含み、第1のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階は、第1のデータチャンクの第1のエンコーディング方式を第1のエンコーディングデータの第2のエンコーディング方式に変更する段階を含む。
[ステートメント49]
本発明の実施形態は、ステートメント47による物品を含み、第1のデータチャンク及び第3のエンコーディングデータの中の少なくとも1つの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階は、第3のエンコーディングデータの第1のエンコーディング方式を第2のエンコーディング方式に変更する段階を含む。
[ステートメント50]
本発明の実施形態は、ステートメント40による物品を含み、ホストコンピュータの関心対象である第1のデータチャンクに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階は、トランスコーディングのルールに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階と、ホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階は、トランスコーディングのルールに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階と、を含む。
[ステートメント51]
本発明の実施形態は、ステートメント40による物品を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第1のデータチャンクを受信する段階は、ストリームスプリッタで、入力エンコーディングデータを受信する段階と、ストリームスプリッタによって、入力エンコーディングデータで、第1のエンコーディング方式を使用してエンコーディングされた第1のデータチャンク及び第2のエンコーディング方式を使用してエンコーディングされた第2のデータチャンクを識別する段階と、ストリームスプリッタから提供された入力エンコーディングデータから第1のデータチャンクを受信する段階と、を含む。
[ステートメント52]
本発明の実施形態は、ステートメント40による物品を含み、マシンによって命令語が実行される方法は、ストレージ装置から入力辞書を受信する段階と、ホストコンピュータの関心データ及びホストコンピュータの無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階と、出力辞書をホストコンピュータに出力する段階と、を更に含む。
[ステートメント53]
本発明の実施形態は、ステートメント52による物品を含み、ホストコンピュータの関心データ及びホストコンピュータの無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階は、トランスコーディングのルールに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階を含む。
[ステートメント54]
本発明の実施形態は、ステートメント52による物品を含み、ホストコンピュータの関心データ及びホストコンピュータに無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階は、入力辞書で選択された項目のサブセットに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階を含む。
[ステートメント55]
本発明の実施形態は、ステートメント40による物品を含み、トランスコーダは、入力エンコーディングデータのデコーディングなしに入力エンコーディングデータから第1のエンコーディングデータ及び第2エンコーディングデータを生成するように動作する。
[ステートメント56]
本発明の実施形態は、ステートメント40による物品を含み、トランスコーダは、ソリッドステートドライブ(SSD)のストレージ装置に含まれる。
[ステートメント57]
本発明の実施形態は、ステートメント56による物品を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第1のデータチャンクを受信する段階は、トランスコーダで、SSDストレージ装置内のストレージから入力エンコーディングデータからの第1のデータチャンクを受信する段階を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第2のデータチャンクを受信する段階は、トランスコーダで、SSDストレージ装置内のストレージから入力エンコーディングデータからの第2のデータチャンクを受信する段階を含む。
【0185】
[ステートメント58]
本発明の実施形態のストレージ装置は、入力エンコーディングデータのためのストレージと、ストレージ上のホストコンピュータからの読み取り要請及び書き込み要請をプロセッシングするコントローラと、ストレージに格納された入力エンコーディングデータに適用されるホストコンピュータから発生する属性を受信するインストレージコンピュータ(ISC)コントローラと、入力エンコーディングデータに対する入力辞書から出力辞書にマッピングするインデックスマッパーを有するトランスコーダと、を備え、入力辞書は、少なくとも1つの第1の項目及び少なくとも1つの第2の項目を含み、少なくとも1つの第1の項目は、少なくとも1つの第3の項目にマッピングされ、少なくとも1つの第2の項目は、出力辞書の「ドントケア」の項目にマッピングされる。
【0186】
[ステートメント59]
本発明の実施形態は、ステートメント58によるストレージ装置を含み、トランスコーダは、プロセッサ、FPGA(Field Programmable Gate Array)、ASIC(Application-Specific Integrated Circuit)、GPU(Graphics Processing Unit)、又は汎用GPU(GPGPU)の中の少なくとも1つを含む。
[ステートメント60]
本発明の実施形態は、ステートメント58によるストレージ装置を含み、ISCコントローラは、トランスコーダからの出力のエンコーディングデータにアクセラレーション機能を適用するように動作する。
[ステートメント61]
本発明の実施形態は、ステートメント60によるストレージ装置を含み、ISCコントローラは、出力のエンコーディングデータに対するアクセラレーション機能の結果をトランスコーダからホストコンピュータに出力するように動作する。
[ステートメント62]
本発明の実施形態は、ステートメント58によるストレージ装置を含み、ISCコントローラは、トランスコーダの出力エンコーディングデータをホストコンピュータに伝送するように動作する。
[ステートメント63]
本発明の実施形態は、ステートメント62によるストレージ装置を含み、ISCコントローラは、出力辞書をホストコンピュータに伝達するように動作する。
[ステートメント64]
本発明の実施形態は、ステートメント58によるストレージ装置を含み、トランスコーダは、入力エンコーディングデータ及び入力辞書から出力辞書へのマップに少なくとも部分的に基づいて、出力のエンコーディングデータを生成するように動作する。
[ステートメント65]
本発明の実施形態は、ステートメント64によるストレージ装置を含み、トランスコーダは、入力エンコーディングデータを格納するバッファと、インデックスマッパーと、入力エンコーディングデータに応答する修正された現在のエンコーディングデータ、修正された現在のエンコーディングデータ、及び入力辞書から出力辞書へのマップを格納する現在のエンコーディングバッファと、前の入力エンコーディングデータに応答する修正された前のエンコーディングデータ、変更された前のエンコーディングデータ、及び入力辞書から出力辞書へのマップを格納する前のエンコーディングバッファと、現在のエンコーディングバッファの修正された現在のエンコーディングデータ、前のエンコーディングバッファの修正された前のエンコーディングデータ、及びトランスコーディングルールに応答する出力ストリームを生成するルール評価器と、を含む。
[ステートメント66]
本発明の実施形態は、ステートメント65によるストレージ装置を含み、トランスコーディングのルールは、属性に少なくとも部分的に基づく。
[ステートメント67]
本発明の実施形態は、ステートメント65によるストレージ装置を含み、ルール評価器は、入力エンコーディングデータのデコーディングなしに、現在のエンコーディングバッファの修正された現在のエンコーディングデータ、前のエンコーディングバッファの修正された前のエンコーディングデータ、及びトランスコーディングのルールに応答する出力ストリームを生成する。
[ステートメント68]
本発明の実施形態は、ステートメント64によるストレージ装置を含み、入力エンコーディングデータは、第1のエンコーディング方式を使用し、出力エンコーディングデータは、第2のエンコーディング方式を使用し、そして第2のエンコーディング方式は、第1のエンコーディング方式と異なる。
[ステートメント69]
本発明の実施形態は、ステートメント58によるストレージ装置を含み、入力エンコーディングデータは、ストレージにカラムフォーマットで格納される。
[ステートメント70]
本発明の実施形態は、ステートメント69によるストレージ装置を含み、入力エンコーディングデータは、アパッチパールケェイ(Apache Parquet)ストレージフォーマットを使用して格納された入力ファイルを含む。
[ステートメント71]
本発明の実施形態は、ステートメント69によるストレージ装置を含み、入力エンコーディングデータを含むカラムチャンクをプロセッシングし、入力エンコーディングデータをトランスコーダに伝達するカラムチャンクプロセッサを更に含む。
[ステートメント72]
本発明の実施形態は、ステートメント71によるストレージ装置を含み、カラムチャンクプロセッサは、トランスコーダを含む。
[ステートメント73]
本発明の実施形態は、ステートメント71によるストレージ装置を含み、カラムチャンクプロセッサは、プロセッサ、FPGA(Field Programmable Gate Array)、ASIC(Application-Specific Integrated Circuit)、GPU(Graphics Processing Unit)、及び汎用GPU(GPGPU)の中の少なくとも1つを含む。
[ステートメント74]
本発明の実施形態は、ステートメント58によるストレージ装置を含み、トランスコーダは、出力エンコーディングデータを生成するために属性に少なくとも部分的に基づいて、入力エンコーディングデータに適用するトランスコーディングのルールを作成するように動作する。
[ステートメント75]
本発明の実施形態は、ステートメント74によるストレージ装置を含み、トランスコーダは、入力エンコーディングデータをデコーディングせずに、出力エンコーディングデータを生成するように動作する。
【0187】
[ステートメント76]
本発明の実施形態の方法は、トランスコーダで、入力エンコーディングデータに適用する属性を受信する段階と、入力エンコーディングデータに対する入力辞書にアクセスする段階と、属性によってカバーされる入力辞書で少なくとも1つの第1項目及び属性によってカバーされない入力辞書で少なくとも1つの第2の項目を識別する段階と、属性によってカバーされない辞書で少なくとも1つの第2の項目を排除する出力辞書を生成する段階であって、トランスコーディング辞書は、少なくとも第3の項目及び「ドントケア」の項目を含む段階と、トランスコーダにより、入力辞書の少なくとも1つの第1項目を出力辞書の少なくとも1つの第3項目にマッピングし、属性によってカバーされない入力辞書の少なくとも1つの第2項目を出力辞書の「ドントケア」の項目にマッピングする段階と、を有する。
【0188】
[ステートメント77]
本発明の実施形態は、ステートメント76による方法を含み、入力エンコーディングデータは、カラムフォーマットで格納される。
[ステートメント78]
本発明の実施形態は、ステートメント77による方法を含み、入力エンコーディングデータは、アパッチパールクェイ(Apache Parquet)のストレージフォーマットを使用して格納された入力ファイルを含む。
[ステートメント79]
本発明の実施形態は、ステートメント76による方法を含み、入力エンコーディングデータは、カラムフォーマットで格納されたカラムチャンクを含む。
[ステートメント80]
本発明の実施形態は、ステートメント76による方法を含み、この方法は、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階と、出力エンコーディングデータを出力する段階と、を含む。
[ステートメント81]
本発明の実施形態は、ステートメント80による方法を含み、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階は、トランスコーダで、入力エンコーディングデータから第1のデータチャンクを受信する段階と、第1のデータチャンクが属性によってカバーされることを決定する段階と、辞書マップを使用してホストコンピュータの関心対象である第1のデータチャンクに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階と、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第2のデータチャンクを受信する段階と、第2のデータチャンクが属性によってカバーされないことを決定する段階と、辞書マップを使用してホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2のエンコーディングデータを生成する段階と、第1のエンコーディングデータ及び第2のエンコーディングデータを出力する段階と、を含む。
[ステートメント82]
本発明の実施形態は、ステートメント81による方法を含み、トランスコーダで、入力エンコーディングデータから第1のデータチャンクを受信する段階は、カラムチャンクプロセッサで、インストレージコンピュータ(ISC)コントローラからブロック識別子(ID)のリストを受信する段階と、カラムチャンクプロセッサにより、ブロックIDのリストからブロックブロック識別子(ID)を含むカラムチャンクにアクセスする段階と、カラムチャンクプロセッサからカラムチャンクからの入力エンコーディングデータを検索する段階と、カラムチャンクプロセッサからの入力エンコーディングデータをトランスコーダに伝送する段階と、を含む。
[ステートメント83]
本発明の実施形態は、ステートメント81による方法を含み、この方法は、属性に少なくとも部分的に基づいて、入力エンコーディングデータに適用するためのトランスコーディングのルールを生成する段階を更に含む。
[ステートメント84]
本発明の実施形態は、ステートメント80による方法を含み、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階は、入力エンコーディングデータのデコーディングなしに、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階を含む。
[ステートメント85]
本発明の実施形態は、ステートメント80による方法を含み、入力エンコーディングデータは、第1のエンコーディング方式を使用し、出力エンコーディングデータは、第2のエンコーディング方式を使用し、そして第2のエンコーディング方式は、第1のエンコーディング方式と異なる。
[ステートメント86]
本発明の実施形態は、ステートメント80による方法を含み、出力エンコーディングデータを出力する段階は、出力エンコーディングデータをISCコントローラに出力する段階を含む。
[ステートメント87]
本発明の実施形態は、ステートメント86による方法を含み、出力エンコーディングデータをISCコントローラに出力する段階は、出力辞書をISCコントローラに出力する段階を更に含む。
[ステートメント88]
本発明の実施形態は、ステートメント87による方法を含み、この方法は、ISCコントローラからホストコンピュータに出力エンコーディングデータ及び出力辞書を伝達する段階を更に含む。
[ステートメント89]
本発明の実施形態は、ステートメント87による方法を含み、この方法は、アクセラレーションされたデータを生成するために、ISCコントローラによって出力エンコーディングデータに対してアクセラレーション機能を遂行する段階を更に含む。
[ステートメント90]
本発明の実施形態は、ステートメント89による方法を含み、この方法は、ISCコントローラからホストコンピュータにアクセラレーションされたデータを出力する段階を更に含む。
[ステートメント91]
本発明の実施形態は、ステートメント76による方法を含み、この方法は、出力辞書を出力する段階を更に含む。
[ステートメント92]
本発明の実施形態は、ステートメント76による方法を含み、入力エンコーディングデータに適用するために属性を受信する段階は、ISCコントローラから入力エンコーディングデータに適用する属性を受信する段階を含む。
[ステートメント93]
本発明の実施形態は、ステートメント92による方法を含み、この方法は、ISCコントローラから入力辞書を受信する段階を更に含む。
[ステートメント94]
本発明の実施形態は、ステートメント76による方法を含み、この方法は、入力辞書で属性によってカバーされない項目がないと決定する段階と、入力エンコーディングデータを出力エンコーディングデータにトランスコーディングせずに入力エンコーディングデータを出力する段階と、を含む。
【0189】
[ステートメント95]
本発明の実施形態の物品は、命令語を格納したコンピュータ読み取り可能な非一時的記録媒体を含む物品であって、マシンによって命令語が実行され方法は、トランスコーダで、入力エンコーディングデータに適用する属性を受信する段階と、入力エンコーディングデータに対する入力辞書にアクセスする段階と、属性によってカバーされる入力辞書で少なくとも1つの第1項目及び属性によってカバーされない入力辞書で少なくとも1つの第2の項目を識別する段階と、属性によってカバーされない入力辞書で少なくとも1つの第2の項目を排除する出力辞書を生成する段階であって、トランスコーディング辞書は、少なくとも第3の項目及び「ドントケア」の項目を含む段階と、トランスコーダにより、入力辞書の少なくとも1つの第1項目を出力辞書の少なくとも1つの第3項目にマッピングし、属性によってカバーされない入力辞書の少なくとも1つの第2項目を出力辞書の「ドントケア」の項目にマッピングする段階と、を有する。
【0190】
[ステートメント96]
本発明の実施形態は、ステートメント95による物品を含み、入力エンコーディングデータは、カラムフォーマットで格納される。
[ステートメント97]
本発明の実施形態は、ステートメント96による物品を含み、入力エンコーディングデータは、アパッチパールクェイ(Apache Parquet)ストレージフォーマットを使用して格納された入力ファイルを含む。
[ステートメント98]
本発明の実施形態は、ステートメント95による物品を含み、入力エンコーディングデータは、カラムフォーマットで格納されたカラムチャンクを含む。
[ステートメント99]
本発明の実施形態は、ステートメント95による物品を含み、マシンによって命令語が実行される方法は、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階と、出力エンコーディングデータを出力する段階と、を含む。
[ステートメント100]
本発明の実施形態は、ステートメント99による物品を含み、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階は、トランスコーダで、入力エンコーディングデータから第1のデータチャンクを受信する段階と、第1データチャンクが属性によってカバーされることを決定する段階と、辞書マップを使用してホストコンピュータの関心対象である第1のデータチャンクに少なくとも部分的に基づいて、第1のデータチャンクから第1のエンコーディングデータを生成する段階と、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第2のデータチャンクを受信する段階と、第2のデータチャンクが属性によってカバーされないことを決定する段階と、辞書マップを使用してホストコンピュータの関心対象ではない第2のデータチャンクに少なくとも部分的に基づいて、第2のデータチャンクから第2エンコーディングデータを生成する段階と、第1のエンコーディングデータ及び第2のエンコーディングデータを出力する段階と、を含む。
[ステートメント101]
本発明の実施形態は、ステートメント100による物品を含み、トランスコーダで、入力エンコーディングデータから第1のデータチャンクを受信する段階は、カラムチャンクプロセッサで、インストレージコンピュータ(ISC)コントローラからブロック識別子(ID)のリストを受信する段階と、カラムチャンクプロセッサにより、ブロック識別子(ID)のリストからブロック識別子(ID)を含むカラムチャンクにアクセスする段階と、カラムチャンクプロセッサからカラムチャンクからの入力エンコーディングデータを検索する段階と、カラムチャンクプロセッサからの入力エンコーディングデータをトランスコーダに伝送する段階と、を含む。
[ステートメント102]
本発明の実施形態は、ステートメント100による物品を含み、マシンによって命令語が実行される方法は、属性に少なくとも部分的に基づいて、入力エンコーディングデータに適用するためのトランスコーディングのルールを生成する段階を含む。
[ステートメント103]
本発明の実施形態は、ステートメント99による物品を含み、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階は、入力エンコーディングデータのデコーディングなしに、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階を含む。
[ステートメント104]
本発明の実施形態は、ステートメント99による物品を含み、入力エンコーディングデータは、第1のエンコーディング方式を使用し、出力エンコーディングデータは、第2のエンコーディング方式を使用し、そして第2のエンコーディング方式は、第1のエンコーディング方式と異なる。
[ステートメント105]
本発明の実施形態は、ステートメント99による物品を含み、出力エンコーディングデータを出力する段階は、出力エンコーディングデータをISCコントローラに出力する段階を含む。
[ステートメント106]
本発明の実施形態は、ステートメント105による物品を含み、出力エンコーディングデータをISCコントローラに出力する段階は、出力辞書をISCコントローラに出力する段階を更に含む。
[ステートメント107]
本発明の実施形態は、ステートメント106による物品を含み、マシンによって命令語が実行される方法は、ISCコントローラからホストコンピュータに出力エンコーディングデータ及び出力辞書を伝達する段階を含む。
[ステートメント108]
本発明の実施形態は、ステートメント106による物品を含み、マシンによって命令語が実行される方法は、アクセラレーションされたデータを生成するために、ISCコントローラによって出力エンコーディングデータに対してアクセラレーション機能を遂行する段階を更に含む。
[ステートメント109]
本発明の実施形態は、ステートメント108による物品を含み、マシンによって命令語が実行される方法は、ISCコントローラからホストコンピュータにアクセラレーションされたデータを出力する段階を更に含む。
[ステートメント110]
本発明の実施形態は、ステートメント95による物品を含み、マシンによって命令語が実行される方法は、出力辞書を出力する段階を更に含む。
[ステートメント111]
本発明の実施形態は、ステートメント95による物品を含み、入力エンコーディングデータに適用するために属性を受信する段階は、ISCコントローラから入力エンコーディングデータに適用する属性を受信する段階を含む。
[ステートメント112]
本発明の実施形態は、ステートメント111による物品を含み、マシンによって命令語が実行される方法は、ISCコントローラから入力辞書を受信する段階を更に含む。
[ステートメント113]
本発明の実施形態は、ステートメント95による物品を含み、マシンによって命令語が実行される方法は、入力辞書に属性によってカバーされない項目がないと決定する段階と、入力エンコーディングデータを出力エンコーディングデータにトランスコーディングせずに入力エンコーディングデータを出力する段階と、含む。
【0191】
以上、本発明の実施形態について図面を参照しながら詳細に説明したが、本発明は、上述の実施形態に限定されるものではなく、本発明の技術的思想から逸脱しない範囲内で多様に変更実施することが可能である。
【符号の説明】
【0192】
105 マシン(ホストコンピュータ)
110 プロセッサ
115 メモリ
120 ストレージ装置
125 メモリコントローラ
130 装置ドライバー
205 クロック
210 ネットワークコネクタ
215 バス
220 ユーザーインターフェース
225 入出力エンジン
305 ストレージ
315 インストレージプロセッサ(in-storage processor)
405 圧縮データ
410 圧縮解除器
415 圧縮解除データ
420 トランスコーダ
425 トランスコーディングされたデータ
430 デコーダ
435 フィルタリングされたプレーンデータ(plain data)
505 ホストインターフェース層(HIL)
510 SSD(ストレージ装置の)コントローラ
515 ストレージ
515-1~515-8 フラッシュメモリチップ(フラッシュメモリストレージ)
520-1~520-4 チャネル
525 変換レイヤ(フラッシュ変換レイヤ(FTL))
530、915 ファイルブロックマップ
605 サーキュラーバッファ(Circular buffer)
610 ストリームスプリッタ
615 インデックスマッパー
620 現在のエンコーディングバッファ
625 前のエンコーディングバッファ
630 トランスコーディングルール
635 ルール評価器
705-1~705-3 第1~第3のチャンク
805 入力辞書
810 出力辞書
905 ファイルメタデータ
910-1~910-3 第1~第3のカラムチャンク
920、925 辞書ページ
930-1~930-3 データページ1~m
1005 インストレージコンピュータコントローラ
1010 カラムチャンクプロセッサ
1105 入力バッファ
1110 出力バッファ
1115 属性評価器
1120 ドントケア(don’t care)評価器