(57)【要約】      （修正有）【課題】ストレージ装置とホストとの間のデータ伝送の速度や効率を高めるトランスコーダ及びトランスコーディング方法を提供する。【解決手段】ストレージ装置が備えるトランスコーダは、入力エンコーディングデータを格納するバッファと、入力辞書から出力辞書にマッピングするインデックスマッパーと、入力エンコーディングデータ、入力辞書及び入力辞書から出力辞書へのマップに応答する修正された現在のエンコーディングデータを格納する現在のエンコーディングバッファと、前の入力エンコーディングデータ、入力辞書及び入力辞書から出力辞書へのマップに応答する修正された前のエンコーディングデータを格納する前のエンコーディングバッファと、修正された現在のエンコーディングデータ、修正された前のエンコーディングデータ及びトランスコーディングのルールに応答する出力ストリームを生成するルール評価器と、を備える。【選択図】図６
2020178347.tif 000002
【特許請求の範囲】
【請求項１】
入力エンコーディングデータを格納するバッファと、
入力辞書から出力辞書にマッピングするインデックスマッパーと、
前記入力エンコーディングデータ、前記入力辞書、及び前記入力辞書から前記出力辞書へのマップに応答する修正された現在のエンコーディングデータを格納する現在のエンコーディングバッファと、
前の入力エンコーディングデータ、前記入力辞書、及び前記入力辞書から前記出力辞書へのマップに応答する修正された前のエンコーディングデータを格納する前のエンコーディングバッファと、
前記現在のエンコーディングバッファに格納された前記修正された現在のエンコーディングデータ、前記前のエンコーディングバッファに格納された前記修正された前のエンコーディングデータ、及びトランスコーディングのルールに応答する出力ストリームを生成するルール評価器と、を備えることを特徴とするトランスコーダ。
【請求項２】
前記ルール評価器は、プロセッサ、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、及び汎用ＧＰＵ（ＧＰＧＰＵ）の中の少なくとも１つを含むことを特徴とする請求項１に記載のトランスコーダ。
【請求項３】
前記ルール評価器は、前記トランスコーディングのルールを使用して前記入力エンコーディングデータから前記修正された現在のエンコーディングデータを生成するように動作することを特徴とする請求項１に記載のトランスコーダ。
【請求項４】
前記ルール評価器は、前記トランスコーディングのルールを使用して前記修正された現在のエンコーディングデータを含むように前記修正された前のエンコーディングデータを修正するように動作することを特徴とする請求項３に記載のトランスコーダ。
【請求項５】
前記ルール評価器は、前記入力エンコーディングデータ及び前記修正された前のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更するように動作することを特徴とする請求項４に記載のトランスコーダ。
【請求項６】
第１のエンコーディング方式を使用して前記入力エンコーディングデータで第１のチャンクを識別し、第２のエンコーディング方式を使用して前記入力エンコーディングデータで第２のチャンクを識別するストリームスプリッタを更に含むことを特徴とする請求項１に記載のトランスコーダ。
【請求項７】
前記インデックスマッパーは、前記入力辞書の少なくとも１つの項目を前記出力辞書の「ドントケア（ｄｏｎ’ｔ  ｃａｒｅ）」の値にマッピングするように動作することを特徴とする請求項１に記載のトランスコーダ。
【請求項８】
前記トランスコーダは、前記入力エンコーディングデータのデコーディングなしに前記入力エンコーディングデータから出力ストリームを生成するように動作することを特徴とする請求項１に記載のトランスコーダ。
【請求項９】
ストレージ装置内のデータに対するトランスコーダの動作方法であって、
トランスコーダで、ストレージ装置から入力エンコーディングデータからの第１のデータチャンクを受信する段階と、
前記第１のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、
前記ホストコンピュータの関心対象である前記第１のデータチャンクに少なくとも部分的に基づいて、前記第１のデータチャンクから第１のエンコーディングデータを生成する段階と、
前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの第２のデータチャンクを受信する段階と、
前記第２のデータチャンクが前記ホストコンピュータの関心対象ではないことを決定する段階と、
前記ホストコンピュータの関心対象ではない前記第２のデータチャンクに少なくとも部分的に基づいて、前記第２のデータチャンクから第２のエンコーディングデータを生成する段階と、
前記第１のエンコーディングデータ及び前記第２のエンコーディングデータを前記ホストコンピュータに出力する段階と、を有することを特徴とする方法。
【請求項１０】
前記ホストコンピュータの関心対象ではない前記第２のデータチャンクに少なくとも部分的に基づいて、前記第２のデータチャンクから第２のエンコーディングデータを生成する段階は、前記第１のエンコーディングデータ内の値を「ドントケア（ｄｏｎ’ｔ  ｃａｒｅ）」の値に変更する段階を含むことを特徴とする請求項９に記載の方法。
【請求項１１】
前記ホストコンピュータの関心対象ではない前記第２のデータチャンクに少なくとも部分的に基づいて、前記第２のデータチャンクから第２のエンコーディングデータを生成する段階は、前記第２のエンコーディングデータを「ドントケア」の値を含む第３のエンコーディングデータに結合する段階を更に含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記ホストコンピュータの関心対象ではない前記第２のデータチャンクに少なくとも部分的に基づいて、前記第２のデータチャンクから第２のエンコーディングデータを生成する段階は、
少なくとも第１のエンコーディング方式を変更する段階と、
前記第２のデータチャンク及び前記第３のエンコーディングデータのいずれかを第２のエンコーディング方式に変換する段階と、を含むことを特徴とする請求項１１に記載の方法。
【請求項１３】
前記ホストコンピュータの関心対象である前記第１のデータチャンクに少なくとも部分的に基づいて、前記第１のデータチャンクから第１のエンコーディングデータを生成する段階は、前記第１のエンコーディングデータを第３のエンコーディングデータに結合する段階を含むことを特徴とする請求項９に記載の方法。
【請求項１４】
前記ホストコンピュータの関心対象である前記第１のデータチャンクに少なくとも部分的に基づいて、前記第１のデータチャンクから第１のエンコーディングデータを生成する段階は、前記第１のデータチャンク及び前記第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階を更に含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
前記ホストコンピュータの関心対象である前記第１のデータチャンクに少なくとも部分的に基づいて、前記第１のデータチャンクから第１のエンコーディングデータを生成する段階は、トランスコーディングルールに少なくとも部分的に基づいて、前記第１のデータチャンクから前記第１のエンコーディングデータを生成する段階を含み、
前記ホストコンピュータの関心対象ではない前記第２のデータチャンクに少なくとも部分的に基づいて、前記第２のデータチャンクから第２のエンコーディングデータを生成する段階は、トランスコーディングルールに少なくとも部分的に基づいて、前記第２のデータチャンクから前記第２のエンコーディングデータを生成する段階を含むことを特徴とする請求項９に記載の方法。
【請求項１６】
トランスコーダで、ストレージ装置から入力エンコーディングデータからの第１のデータチャンクを受信する段階は、
ストリームスプリッタで前記入力エンコーディングデータを受信する段階と、
前記ストリームスプリッタによって、前記入力エンコーディングデータで、第１のエンコーディング方式を使用してエンコーディングされた前記第１のデータチャンク及び第２のエンコーディング方式を使用してエンコーディングされた前記第２のデータチャンクを識別する段階と、
前記ストリームスプリッタから提供された前記入力エンコーディングデータから前記第１のデータチャンクを受信する段階と、を含むことを特徴とする請求項９に記載の方法。
【請求項１７】
前記ストレージ装置から入力辞書を受信する段階と、
前記ホストコンピュータの関心データ及び前記ホストコンピュータの無関心データに少なくとも部分的に基づいて、前記入力辞書を出力辞書にマッピングする段階と、
前記出力辞書を前記ホストコンピュータに出力する段階と、を更に含むことを特徴とする請求項９に記載の方法。
【請求項１８】
前記トランスコーダは、前記入力エンコーディングデータのデコーディングなしに前記入力エンコーディングデータから前記第１のエンコーディングデータ及び前記第２のエンコーディングデータを生成するように動作することを特徴とする請求項９に記載の方法。
【請求項１９】
命令語を格納したコンピュータ読み取り可能な非一時的記録媒体を含む物品であって、
マシンによって前記命令語が実行される方法は、
トランスコーダで、ストレージ装置から入力エンコーディングデータからの第１のデータチャンクを受信する段階と、
前記第１のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、
前記ホストコンピュータの関心対象である前記第１のデータチャンクに少なくとも部分的に基づいて、前記第１のデータチャンクから第１のエンコーディングデータを生成する段階と、
前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの第２のデータチャンクを受信する段階と、
前記第２のデータチャンクが前記ホストコンピュータの関心対象ではないことを決定する段階と、
前記ホストコンピュータの関心対象ではない前記第２のデータチャンクに少なくとも部分的に基づいて、前記第２のデータチャンクから第２のエンコーディングデータを生成する段階と、
前記第１のエンコーディングデータ及び前記第２のエンコーディングデータを前記ホストコンピュータに出力する段階と、を有することを特徴とする物品。
【請求項２０】
前記ホストコンピュータの関心対象ではない前記第２のデータチャンクに少なくとも部分的に基づいて、前記第２のデータチャンクから第２のエンコーディングデータを生成する段階は、前記第１のエンコーディングデータ内の値を「ドントケア（ｄｏｎ’ｔ  ｃａｒｅ）」の値に変更する段階を含むことを特徴とする請求項１９に記載の物品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的に、ストレージ装置に関し、より詳細には、ストレージ装置内のデータに対するトランスコーディングに関する。
【背景技術】
【０００２】
ソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：以下、ＳＳＤ）などのストレージ装置は、比較的多量のデータを格納することができる。ホストプロセッサは、ＳＳＤからデータを要請してそのデータに対する動作を遂行する。データをホストプロセッサに伝送するには、ホストプロセッサとＳＳＤとを連結する特定のアーキテクチャに基づいて、比較的相当の時間が必要である。例えば、ホストプロセッサとＳＳＤとが４レーンの第３世代ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）を使用して連結される場合、ＳＳＤとホストプロセッサとの間に伝送され得る最大のデータ量は、毎秒約４ＧＢである。
【０００３】
ホストに伝送されるデータの量を減らし、カラムフォーマット（ｃｏｌｕｍｎａｒ  ｆｏｒｍａｔ）の利点を活用する必要性が台頭する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第５９１８２２５号明細書
【特許文献２】米国特許第７９６６３４３号明細書
【特許文献３】米国特許第８０３２４９９号明細書
【特許文献４】米国特許第８１５９３７４号明細書
【特許文献５】米国特許第８１７００９５号明細書
【特許文献６】米国特許第８６２６７２５号明細書
【特許文献７】米国特許第８７６２３８７号明細書
【特許文献８】米国特許第８９３０７９８号明細書
【特許文献９】米国特許出願公開第２０１２／０１９４３６１号明細書
【特許文献１０】米国特許出願公開第２０１３／００６０７８０号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、上記従来技術に鑑みてなされたものであって、本発明の目的は、ストレージ装置とホストとの間のデータ伝送の速度や効率を高めるトランスコーダ及びトランスコーディング方法を提供することにある。
【課題を解決するための手段】
【０００６】
上記目的を達成するためになされた本発明の一態様によるトランスコーダは、入力エンコーディングデータを格納するためのバッファと、入力辞書から出力辞書にマッピングするインデックスマッパーと、前記入力エンコーディングデータ、前記入力辞書、及び前記入力辞書から前記出力辞書へのマップに応答する修正された現在のエンコーディングデータを格納する現在のエンコーディングバッファと、前の入力エンコーディングデータ、前記入力辞書、及び前記入力辞書から前記出力辞書へのマップに応答する修正された前のエンコーディングデータを格納する前のエンコーディングバッファと、前記現在のエンコーディングバッファに格納された前記修正された現在のエンコーディングデータ、前記前のエンコーディングバッファに格納された前記修正された前のエンコーディングデータ、及びトランスコーディングのルールに応答する出力ストリームを生成するルール評価器と、を備える。
【０００７】
上記目的を達成するためになされた本発明の一態様によるストレージ装置内のデータに対するトランスコーダの動作方法は、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第１のデータチャンクを受信する段階と、前記第１のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、前記ホストコンピュータの関心対象である前記第１のデータチャンクに少なくとも部分的に基づいて、前記第１のデータチャンクから第１のエンコーディングデータを生成する段階と、前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの第２のデータチャンクを受信する段階と、前記第２のデータチャンクが前記ホストコンピュータの関心対象ではないことを決定する段階と、前記ホストコンピュータの関心対象ではない前記第２のデータチャンクに少なくとも部分的に基づいて、前記第２のデータチャンクから第２のエンコーディングデータを生成する段階と、前記第１のエンコーディングデータ及び前記第２のエンコーディングデータを前記ホストコンピュータに出力する段階と、を有する。
【０００８】
上記目的を達成するためになされた本発明の一態様による命令語を格納したコンピュータ読み取り可能な非一時的記録媒体を含む物品において、マシンによって前記命令語が実行される方法は、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第１のデータチャンクを受信する段階と、前記第１のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、前記ホストコンピュータの関心対象である前記第１のデータチャンクに少なくとも部分的に基づいて、前記第１のデータチャンクから第１のエンコーディングデータを生成する段階と、前記トランスコーダで、前記ストレージ装置から前記入力エンコーディングデータからの第２のデータチャンクを受信する段階と、前記第２のデータチャンクが前記ホストコンピュータの関心対象ではないことを決定する段階と、前記ホストコンピュータの関心対象ではない前記第２のデータチャンクに少なくとも部分的に基づいて、前記第２のデータチャンクから第２のエンコーディングデータを生成する段階と、前記第１のエンコーディングデータ及び前記第２のエンコーディングデータを前記ホストコンピュータに出力する段階と、を有する。
【発明の効果】
【０００９】
本発明のトランスコーダによれば、ストレージ装置とホスト装置とは、相互に不必要なトランザクションを最小化して、データ伝送の速度及び性能を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施形態によるエンコーディングデータのトランスコーディングをサポートするソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：ＳＳＤ）を含むシステムを示す図である。
【図２】図１のマシンの詳細を示す図である。
【図３】他のアプローチを使用して同一のデータを伝達する図１のストレージ装置及びプロセッサを示す図である。
【図４】本発明の一実施形態によるトランスコーディングされたデータを交換する図１のストレージ装置及び図１のプロセッサを示す図である。
【図５】図１のストレージ装置の詳細を示す図である。
【図６】図４のトランスコーダの詳細を示す図である。
【図７】入力ストリームの一部（又は全部）である入力エンコーディングデータをチャンクに分割する図６のストリームスプリッタを示す図である。
【図８】入力辞書を出力辞書にマッピングする図６のインデックスマッパーを示す図である。
【図９】カラムフォーマットで格納されたファイルの一例を示す図である。
【図１０】カラムフォーマットで格納されたデータに対するトランスコーディングを実施する図１のストレージ装置を示す図である。
【図１１】カラムフォーマットで格納されたデータに対するトランスコーディングを実施する図１０のカラムチャンクプロセッサを示す図である。
【図１２Ａ】本発明の一実施形態によるデータをトランスコーディングする図４及び図６のトランスコーダの手順の一例のフローチャートである。
【図１２Ｂ】本発明の一実施形態によるデータをトランスコーディングする図４及び図６のトランスコーダの手順の一例のフローチャートである。
【図１２Ｃ】本発明の一実施形態によるデータをトランスコーディングする図４及び図６のトランスコーダの手順の一例のフローチャートである。
【図１３】入力エンコーディングデータをチャンクに分割する図６のストリームスプリッタの手順の一例を示すフローチャートである。
【図１４Ａ】本発明の一実施形態によるカラムフォーマットで格納されたデータをトランスコーディングする図１０のカラムチャンクプロセッサ及び／又は図４及び図６のトランスコーダの手順の一例を示すフローチャートである。
【図１４Ｂ】本発明の一実施形態によるカラムフォーマットで格納されたデータをトランスコーディングする図１０のカラムチャンクプロセッサ及び／又は図４及び図６のトランスコーダの手順の一例を示すフローチャートである。
【図１５】本発明の一実施形態による図８の入力辞書を出力辞書にマッピングする図６のインデックスマッパーの手順の一例を示すフローチャートである。
【図１６Ａ】図１のホストコンピュータから受信された属性を管理してトランスコーディングされたデータに対するアクセラレーション機能を潜在的に遂行する図１０のインストレージコンピュータコントローラの手順の一例を示すフローチャートである。
【図１６Ｂ】図１のホストコンピュータから受信された属性を管理してトランスコーディングされたデータに対するアクセラレーション機能を潜在的に遂行する図１０のインストレージコンピュータコントローラの手順の一例のフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態の具体例を、図面を参照しながら詳細に説明する。後述する詳細な説明では、多様な特定の詳細を本発明の技術的思想の十分な理解を助けるために提供する。しかし、この分野における通常の技術を有する者は、このような特定の詳細なしでも、本発明の技術的思想を実施することができる。別の例として、よく知られている方法、手順、構成要素（構成要素）、回路、並びにネットワークは、実施形態の側面を不必要に曖昧にしないために詳しく説明しない。
【００１２】
ここで、第１、第２などのような用語を多様なエレメント（ｅｌｅｍｅｎｔ）を説明するために使用するが、これらのエレメントは、このような用語によって限定されない。このような用語は、１つのエレメントを他の１つのエレメントから区別するためにのみ使用される。例えば、本発明の技術的思想の範囲から離れずに、第１のモジュールは、第２のモジュールとして命名され得る。同様に、第２のモジュールは、第１のモジュールとして命名され得る。
【００１３】
本発明の技術的思想の説明で使用する用語は、特定の実施形態を説明するための目的でのみ使用され、本発明の技術的思想を限定するものとして意図されない。本発明の技術的思想の説明、及び請求項で使用するように、文脈上明らかに別の意味を示すものと判定されない限り、単数の表現は複数の表現も含むものとして意図される。「及び／又は」の用語は、１つ又はそれよりも多くの関連項目の任意且つ可能な全ての組み合わせを含むものとして参照される。「含む（ｃｏｍｐｒｉｓｅ）」及び／又は「含んでいる（ｃｏｍｐｒｉｓｉｎｇ）」の用語は、詳細な説明で使用する際に、言及する特性、整数、段階、動作、エレメント、及び／又は構成要素の存在を明示し、１つ又はそれよりも多くの他の特性、整数、段階、動作、エレメント、構成要素、及び／又はそれらのグループの存在若しくは追加を排除しない。図面の構成要素及び特性は、実際の比率に必ずしも比例するものではない。
【００１４】
例えば、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、又はその他のプロセッサをＳＳＤの近くに置いていくつかのプロセッシング機能を使用すると、いくつかの利点がある。１番目に、ＳＳＤとニア（ｎｅａｒ）プロセッサとの間の連結は、ＳＳＤをホストプロセッサに連結するよりも、より高い帯域幅をサポートして、より速いデータ伝送を許容する。２番目に、ホストプロセッサが、データをプロセッシングする必要がないようにすることで、ホストプロセッサは、他の機能を遂行することができる一方で、ニアプロセッサは、データプロセッシングを行うことができる。
【００１５】
しかし、データのニアストレージでのプロセッシングは、データの圧縮又はエンコーディングをする際に、潜在的な欠点を有する。ローデータで動作するいくつかのニアストレージプロセッサは、データに対して動作する前にデータを圧縮解除したり、デコーディングしたりする。また、ニアストレージプロセッサは、プロセッシングの結果をホストプロセッサに報告する。仮に、結果としてホストプロセッサに伝送されるデータの量がローデータの量よりも大きい場合、ニアストレージプロセッサを使用して発生する利得が失われるか、又は最悪の場合には、そもそも圧縮又はエンコーディングのデータがホストプロセッサに伝送されていた場合よりも、より多くのデータがホストプロセッサに伝送される。
【００１６】
加えて、トランスコーディングは、一般的に、データに対して遂行されることがあるが、データがカラムフォーマットで格納された場合には、カラムのフォーマットを利用するためにいくつかの適応行動が遂行される。
【００１７】
圧縮フォーマットのデータに対するニアデータのプロセッシングは、オフローディングの利点のうちのいくつかを無効にする。例えば、ＳＳＤとホストプロセッサとの間の連結が毎秒Ｘバイトの伝送をサポートする場合、データがＹの圧縮率を使用して圧縮され、伝送のために選択されたデータの量がＺである場合に、ニアプロセッサがホストプロセッサに伝送するデータの量は、「Ｘ×Ｙ×Ｚ」である。この製品が、Ｘの伝送速度よりも低い場合、即ち「Ｙ×Ｚ＜１」の場合には、アクセラレーション（ニアプロセッシングによる）が有利である。
【００１８】
本発明のいくつかの実施形態で、カラムストレージは、ストレージフットプリント（ｓｔｏｒａｇｅ  ｆｏｏｔｐｒｉｎｔ）を減らすために、データのエンコーディング（例えば、ＲＬＥ（Ｒｕｎ  Ｌｅｎｇｔｈ  Ｅｎｃｏｄｉｎｇ））及び／又は圧縮（ｓｎａｐｐｙ）を使用する。圧縮ではないエンコーディングは、主要なエントロピーの減少を提供する。エンコーディング後、圧縮率は小さくなる傾向がある（約２未満）。
【００１９】
本発明のいくつかの実施形態で、例えばエンコーディングアルゴリズムに少なくとも部分的に基づくエンコーディングデータのマット（ｍａｔ）は、結果を膨張させずにニアプロセッシングされる（即ち、エンコーディングされたローデータがホストプロセッサに伝送される場合よりも大きい結果がホストプロセッサに伝送される）。結果を膨張させずに使用することができるエンコーディングアルゴリズムには、辞書圧縮（Ｄｉｃｔｉｏｎａｒｙ  ｃｏｍｐｒｅｓｓｉｏｎ）、接頭辞のエンコーディング（Ｐｒｅｆｉｘ  Ｅｎｃｏｄｉｎｇ）、ＲＬＥ（Ｒｕｎ  Ｌｅｎｇｔｈ  Ｅｎｃｏｄｉｎｇ）、クラスターエンコーディング（Ｃｌｕｓｔｅｒ  Ｅｎｃｏｄｉｎｇ）、スパースエンコーディング（Ｓｐａｒｓｅ  Ｅｎｃｏｄｉｎｇ）、及び間接エンコーディング（Ｉｎｄｉｒｅｃｔ  Ｅｎｃｏｄｉｎｇ）が含まれるが、これに限定されず、本発明の実施形態と共に他のエンコーディングアルゴリズムが使用され得る。以下で説明する本発明の実施形態は、ＲＬＥ及びビットパッキングに焦点を当てるが、本発明の実施形態は、他のエンコーディングアルゴリズムを含むように拡張され得る。
【００２０】
トランスコーダにフィルタリングするデータを教える方法に対する付加的な疑問もある。これは、格納されるデータのサイズを減らす辞書が、データが格納される場所ではない別の場所に格納され得るという問題である。このようなストレージフォーマットの例であるカラムストア（ｓｔｏｒｅ）は、関心のあるデータを簡単に探し出すことができる。しかし、辞書がデータから分離して格納され得るため、システムは、トランスコーディングを遂行するために、当該データだけでなく辞書を見つけることができなければならない。
【００２１】
本発明の実施形態は、データを膨張させずにエンコーディングデータをフィルタリングできるようにする。フィルタリングされたデータは、変換ルールを使用してエンコーディングデータに組み込まれるエンコーディング情報を使用して再エンコーディングされ得る。本発明の実施形態におけるトランスコーダは、エンコーディングデータをフィルタリングし、ホストに伝送されるエンコーディングを修正することができる。従って、ホストが通常（ｐｌａｉｎ）のデータ（圧縮アルゴリズム及び／又はエンコーディングデータの効率性に応じてエンコーディング／圧縮データに比べてかなり大きくなり得る）をプロセッシングしなければならない代わりに、ホストは、エンコーディングデータを受信してプロセッシングすることができる。ホストとストレージ装置との間の帯域幅は、データを伝送するのにかかる時間に実質的に影響を与える限界を有し得るため、エンコーディングデータを伝送することは、一般的なデータ（フィルタリングされるか、又はそうでない）を伝送することに比べてプロセッシング時間を節約することができる。
【００２２】
サーキュラーバッファ（Ｃｉｒｃｕｌａｒ  ｂｕｆｆｅｒ）は、一度にプロセッシングするのに十分なデータを格納することができる。本発明の実施形態では、サーキュラーバッファを別の構造を使用するバッファに置き換えることができる。
【００２３】
インデックスマッパーは、出力ストリームと共に使用するために、入力された辞書マップから縮小された辞書マップへのマッピングを提供する。
【００２４】
現在のエンコーディングバッファは、適切なエンコーディングに基づいて入力ストリームから読み取られたデータを格納する。トランスコーディングのルール、現在のエンコーディングバッファ、及び前のエンコーディングバッファの情報を使用するルール評価器は、現在のエンコーディングバッファでデータをプロセッシングする方法を決定する。現在のエンコーディングバッファのデータが、前のエンコーディングバッファのデータに結合されるか否かに応じて、ルールの評価器は、現在のエンコーディングバッファのデータに基づいて、前のエンコーディングバッファをアップデートし、前のエンコーディングバッファを出力（現在のエンコーディングバッファに前のエンコーディングバッファを切り替える）するか、又は他の動作を遂行する。例えば、トランスコーダが現在のエンコーディングバッファで「ドントケア（ｄｏｎ’ｔ  ｃａｒｅ）」の値と見なされる値（以下で説明する）を識別した場合に、当該値は、前のエンコーディングバッファの既存の「ドントケア」の値と結合される。
【００２５】
ストリームスプリッタは、異なるエンコーディングを使用してエンコーディングされた入力ストリームの異なる部分（複数のストリーム）を識別するのに使用される。単一のエンコーディング方式が使用される場合、エンコーディング方式は、パラメータ（即ち、エンコーディングのタイプ）として伝達される。そうではなく、多様なエンコーディング方式が使用される場合（即ち、エンコーディングのタイプが使用されない場合）には、入力ストリーム自体を検査して、与えられたストリームに対するエンコーディング方式が決定される。例えば、カラムストレージフォーマットのエンコーディングに格納されたデータの１番目のバイトは、エンコーディングタイプの情報を含む。ＲＬＥ（Ｒｕｎ  Ｌｅｎｇｔｈ  Ｅｎｃｏｄｉｎｇ）とビットパッキングとを混合する場合には、ＬＳＢが「０」である場合に「エンコーディングのタイプ＝ＲＬＥ」であり、ＬＳＢが「１」である場合に「エンコーディングのタイプ＝ビットパッキング」である。
【００２６】
多様なエンコーディング動作方式の例として、ＲＬＥ及びビットパッキング（ＢＰ）を考慮する。ＲＬＥにおいて、可変の符号なし整数は、値が繰り返される頻度を示すために使用され、固定長の値が提供される。従って、例えば「００００００１１  ００００００１１  ００００００１１  ００００００１１  ００００００１１  ００００００１１  ００００００１１  ００００００１１  ００００００１１（十進値３の９つのコピー）」を伝送する代わりに、データは「００００１００１（十進値９）００００００１１（十進値３）」でエンコーディングされ、これは「００００００１１」が９回繰り返されることを示す。
【００２７】
ビットパッキング（ＢＰ）で、より少ない空間を占めていると判断されたデータは、他の値に結合される。例えば、データが、一般的に８ビットを使用して格納される場合には、４つの値を格納するために総計３２ビットを占める。但し、値が各々４ビットを超えないものとして知られている場合は、単一のバイトに２つの値が格納される。即ち、これがビットパッキングである。圧縮されたデータ及び非圧縮データを表すのに少しのオーバーヘッドがあるため、省空間は、説明されたものよりも若干少ないが、それでもなお有利である。
【００２８】
エンコーディングは、符号なしバイトのグループの数に伴う１つ以上のバイト単位の束値（ｐａｃｋｅｄ  ｖａｌｕｅ）のリストを含む。グループの値の最大値の数は８であり、最大グループの数は６３である。従って、例えばデータ「００００００００  ０００００００１  ００００００００  ０００００００１  ００００００００  ０００００００１  ００００００００  ０００００００１（十進値０１０１０１０１」を表すために、グループは、「０００００００１（グループ１）０００１００００（０、１）０００１００００（０、１）０００１００００（０、１）０００１００００（０、１）」に定義される。
【００２９】
上述したように、ＲＬＥ（及び他のエンコーディング）は、可変の符号なし整数を使用する。可変の符号なし整数もエンコーディングを使用する。全ての８ビットのグループで、最上位ビットは、現在のバイトが値の最後のバイトであるか、又は少なくとも１つの後続のバイトがあるかを示す。多重のバイトが使用される場合、最下位バイトが先に表され、最上位バイトは最後に表される。従って、例えば十進値「１」は「０００００００１」と表され、十進値「２」は「００００００１０」と表され、「０１１１１１１１（十進値１２７）」まで続く。十進値「１２８」は「１０００００００  ０００００００１」と表され、十進値「１２９」は「１０００００００  ０００００００１」等々と表される。基本的に、２進値は、最上位のグループを除いて、７ビットの各グループで１から始まる７ビットのグループに区分される。例えば、十進値「１６，３８４」は「１０００００００  １０００００００  ０００００００１」と表される。
【００３０】
トランスコーダを使用してエンコーディングデータをプロセッシングする際に、いくつかのデータは、「ドントケア」のデータと見なされる。即ち、遂行中の作業に価値がないいくつかのデータがあり得る。「ドントケア」のデータと見なされるデータは、トランスコーダの動作の結果として他の値にマッピングされる。
【００３１】
データベースが多様な人々の国籍（市民権）情報を格納する状況を考慮すると、国籍は、文字列（「中国」、「韓国」、「インド」、「米国」などのような）を使用して格納することができる。しかし、国籍の可能な値は、有限のセットから持ってくるため、データベースに格納されたデータの量を減らすために辞書が使用される。従って、例えば「０」の値は中国を示し、「１」の値はインドを示し、「２」の値は韓国を示し、「３」の値は米国を示すように、国の名前ではなく代表値（インデックス）がデータベースに格納される。１９５カ国（２０１９年７月１９日現在）があるため、１バイトを使用してインデックスを格納することができ、これは文字毎に１バイトを使用して国の名前の文字列を格納するのに使用されるものよりもはるかに少ない。
【００３２】
しかし、遂行されるアクセラレーション演算（例えば、演算は、データベースにある米国市民の数を計算する可能性がある）は、米国の市民に関心があるかもしれない。従って、他の国の市民は、作業に関連がない。即ち、これらは「ドントケア」の値である。トランスコーダは、演算が適用するデータを反映するために、辞書とインデックスとをマッピングする。
【００３３】
カラムフォーマットは、情報をエンコーディングするためにＲＬＥ又はビットパッキング（ＢＰ）を使用する。カラムストレージフォーマットで格納された値文字列（ｖａｌｕｅ  ｓｔｒｉｎｇ）の一部が与えられると、１ビットは、データがＲＬＥ又はビットパッキングを使用して格納されるかを示すために使用される。残りのデータは、それに応じて理解される。
【００３４】
本発明の実施形態によるトランスコーダが、どのようにエンコーディングデータのための代替辞書を提供できるかを理解するために、データが多くの人々に対する国籍情報を含むデータの状況を考慮する。各個人が市民である国の名前は非常に長いが、国の名前の数は比較的少ないため（２００カ国を代表しても、約８ビットを占め、相変わらず国の名前の文字当たり１バイトで各市民の国の名前の文字列を格納することができることから、大幅なコストの削減）、辞書は格納されるデータの量を意味のあるように減らすことができる。これらのエンコーディングは、任意の所望のエンコーディング方式（例えば、ＲＬＥエンコーディング、辞書圧縮、接頭辞エンコーディング、ビットパッキング、クラスターエンコーディング、スパースエンコーディング、及び間接エンコーディング）を使用することができる。
【００３５】
今、適用される属性（条件子、ｐｒｅｄｉｃａｔｅ）（データのフィルタリング）が米国市民のみを検索する場合、他の国の市民に関連付けられるデータに対しては関心がない。例えば、ホストは、データベースに格納される米国の市民が何名かを知りたい可能性がある。変換結果として、辞書は、米国市民のための１つの項目に縮小され（「ドントケア」の項目に対する暗示的又は明示的な項目があり得る）、ＲＬＥエンコーディングは、米国ではない多様な国の市民のための隣接するＲＬＥ項目を結合するために圧縮される。従って、データのエンコーディングは、１（又は２）のロー（ｒｏｗ）を含む辞書に圧縮される。米国市民ではない人々に関連付けられたデータが新たな辞書の単一の項目にインデックスを生成することができるため、実際のエンコーディングデータも減らすことができる。従って、属性（Ｐｒｅｄｉｃａｔｅ）をトランスコーダ内にプッシングすることにより、エンコーディングデータがフィルタリングされる可能性があり、最終的にホストに伝送されるデータの量を減少させる新たなエンコーディングが提供される。辞書マップは、元の辞書やトランスコーディングの辞書に対するマッピング（Ｍａｐｐｉｎｇ）を示す。
【００３６】
ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）は、トランスコーダを実装（他の特徴の中で）するために使用され得るが、本発明の実施形態は、例えば、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、又はソフトウェアを実行する他のプロセッサを含む他の実装の形態を有し得る。加えて、ＩＳＣ（Ｉｎ−ｓｔｏｒａｇｅ  Ｃｏｍｐｕｔｅ）コントローラは、ＦＰＧＡから分離されたり、ＦＰＧＡの一部として実装されたりすることができる。
【００３７】
（フィルタリングのような）アクセラレーション機能が遂行される特定のファイルが与えられると、ＩＳＣコントローラは、ファイルブロック（Ｆｉｌｅ２Ｂｌｏｃｋ）マップを使用して、ファイルのデータを格納するブロックを順番と共に識別する。ＩＳＣコントローラは、ホスト内の構成要素として（ストレージ装置自体から分離されて）実装されるか、又はストレージ装置のいくつかのコントローラである。トランスコーダに（入力バッファを介して）入力される入力ストリームを提供するために、これらのブロックがアクセスされる。
【００３８】
ファイルがカラムフォーマットで格納される場合、データ単位は、それ自体が多数のデータページを含むカラムチャンク（ｃｈｕｎｋ）である。即ち、入力バッファはストレージ装置内のストレージモジュールからカラムチャンクを受信し、トランスコーダは、そのカラムのチャンク上で動作する。一般的に、各カラムチャンクは、そのカラムのチャンク及び／又はそのカラムチャンクのデータに適用する辞書に使用されるエンコーディング方式を指定する独自のメタデータを含む。しかし、全てのストレージフォーマットがこの配列を使用するわけではない。例えば、カラムストレージフォーマットはファイルの別の領域にメタデータを格納し（各カラムのチャンク内とは異なり）、このメタデータはファイル全体と共に使用されるエンコーディング及び辞書を指定する。従って、このようなカラムストレージフォーマットを使用してファイルを格納する場合、ＩＳＣコントローラは（Ｆｉｌｅ２Ｂｌｏｃｋマップを使用して探し出した）ファイルのメタデータ領域からエンコーディング及び辞書を検索（回収）して、トランスコーダがカラムチャンクから所望のある情報を受信すると仮定するよりは（勿論、カラムストレージフォーマットを使用する場合に、カラムチャンクに辞書ページが有り得ない）、その情報をトランスコーダに提供する。同一のエンコーディング方式が全てのカラムチャンクに適用され得るが、このエンコーディング方式自体は、２つ以上の明確に区別されるエンコーディング方式を使用して、これらの間を適切にスイッチングするハイブリッド方式であり得る。例えば、ハイブリッドエンコーディング方式は、ＲＬＥエンコーディングとビットパッキングとが結合された方式である。
【００３９】
辞書及びエンコーディング方式を決定することに加えて、ＩＳＣコントローラは、またエンコーディングデータに適用される属性を抽出し、その属性をトランスコーダにプッシュダウン（Ｐｕｓｈ  ｄｏｗｎ）する。トランスコーダは、この全ての情報を多様な方式で使用する。例えば、ファイルと共に使用されるエンコーディングに関する情報はデータと共に使用されるトランスコーディングのルールを選択するのに使用されるが、辞書及び属性はトランスコーディング辞書及び辞書マップを生成するのに使用される。
【００４０】
属性評価器は、属性を使用して辞書に関心のある項目、及びそうでない項目を判別して関心のある値（そして、可能なら「ドントケア」項目を表す値）を格納するトランスコーディング辞書と、元の辞書からトランスコーディング辞書にインデックスをマッピングする辞書マップとを生成する。
【００４１】
トランスコーディング辞書に「ドントケア」の値に対する項目（Ｅｎｔｒｙ）が含まれている場合、この演算は、技術的に辞書に項目を追加する（元の辞書にそのような値が含まれていないため）。これらの項目を追加すると、新たな問題が発生することがある。トランスコーディング辞書に「ドントケア」の項目を追加することは、一般的にトランスコーディング辞書の１番目の項目（インデックス１）で発生し、これは属性に一致しない値を示すことを意図する。しかし、「ドントケア」」の項目の新たな値を生成することは、多くの費用がかかる。即ち、本発明のシステムは、（既存の全てのインデックスが１だけ離れているため）、全体の辞書をスキャンして再マッピングすることができる。「ドントケア」の項目を追加すると、メモリの再割り当てが発生したり、ビット幅のオーバーフローが発生したりする。例えば、与えられたビット数に対して可能な全ての値が辞書インデックスとして既に使用されている場合に、「ドントケア」の項目を辞書に入力すると、インデックスを表すために使用されるビット数が１ずつ増加する。データページが辞書の一部を使用する場合には、データページのビット幅がより小さくなり、トランスコーディング辞書に「ドントケア」の項目を追加すると、データページで１つの有効な値を使用することができなくなる。例えば、ビット幅が１の場合には、「ドントケア」の項目を追加すると、単一のビットを使用して表現できるよりは、多くの値を含み得るが、一方、ビット幅が２である場合には、ビット幅のオーバーフローなしに「ドントケア」の項目のためのスペースの余地が有り得る。
【００４２】
この問題に対する解決策は、属性プッシュダウンのために辞書サイズが縮小されるか否かを判別するものである。少なくとも辞書が１つの項目に縮小されると、ビット幅のオーバーフローに対する憂慮なしに「ドントケア」の項目のための空間が確保される。辞書が少なくとも１つの項目により減少されない場合、エンコーディングデータは、トランスコーディングを遂行せずにＩＳＣコントローラ／ホストに直接伝送され、これによりトランスコーディングがデータの量を増加させる可能性を避けることができる。
【００４３】
トランスコーダの出力は、（出力バッファを介して）ＩＳＣコントローラに再び返還される。これは２つの目的のために使用される。１番目に、属性をトランスコーダ内にプッシュダウンすると、トランスコーディングされたデータが生成されるが、トランスコーディングされたデータに対して遂行すべき演算がなお残っている可能性がある。例えば、ホストがファイルで米国の市民の数を計算しようと試みる場合に、トランスコーディングされたデータは、その市民を識別するが、カウントはしない。即ち、その動作は、ＩＳＣコントローラでアクセラレーション機能により遂行される。２番目に、トランスコーディングされたデータは、追加動作のためにホストに再び伝送される。ＩＳＣコントローラは、ホストと通信してトランスコーディングされたデータをホストに送る経路を提供する。
【００４４】
図１は、本発明の一実施形態によるエンコーディングデータのトランスコーディングをサポートするソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ：ＳＳＤ）を含むシステムを示す図である。図１で、ホストコンピュータであるマシン１０５は、プロセッサ１１０、メモリ１１５、及びストレージ装置１２０を備える。プロセッサ１１０は、任意の多様なプロセッサである。図１は、単一のプロセッサ１１０を示すが、マシン１０５は任意の数のプロセッサを含み、各々のプロセッサは、シングルコア又はマルチコアプロセッサであり、任意の所望の組み合わせで組み合わされる。
【００４５】
プロセッサ１１０は、メモリ１１５に連結される。メモリ１１５は、フラッシュメモリ、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、永続性ランダムアクセスメモリ（Ｐｅｒｓｉｓｔｅｎｔ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、磁気抵抗ランダムアクセスメモリ（ＭＲＡＭ）などのような不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）などの任意の多様なメモリである。メモリ１１５は、異なるメモリタイプの任意の所望の組み合わせであり、メモリコントローラ１２５によって管理される。メモリ１１５は、「短期（ｓｈｏｒｔ−ｔｅｒｍ）」的にデータを格納するのに使用されるが、これは、データが長期に亘って格納されないと予想される。短期データ（ｓｈｏｒｔ−ｔｅｒｍ  ｄａｔａ）の例は、一時的ファイル、アプリケーションによってローカルに使用されるデータ（他のストレージ位置からコピーされた可能性がある）などを含む。
【００４６】
プロセッサ１１０及びメモリ１１５は、多様なアプリケーションが実行されるオペレーティングシステムをサポートする。これらのアプリケーションは、メモリ１１５又はストレージ装置１２０からデータを読み出したり、記録したりするための要請を発行する。メモリ１１５は、「短期」と称されるデータを格納するのに使用される反面、ストレージ装置１２０は、「長期（ｌｏｎｇ−ｔｅｒｍ）」、即ちデータが長期的に格納されると予想されるデータを格納するのに使用される。ストレージ装置１２０は、装置ドライバー１３０を使用してアクセスされる。ストレージ装置１２０は、ハードディスクドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＳＤ）、及び任意の他の所望のフォーマットのような任意の所望のフォーマットである。
【００４７】
図２は、図１のマシンの詳細を示す図である。図２で、一般的にマシン１０５は、マシンの構成要素の動作を調整するために使用可能なメモリコントローラ１２５及びクロック２０５を含む１つ以上のプロセッサ１１０を有する。プロセッサ１１０は、例えば、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ＲＯＭ（ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、又は他の状態のストレージ媒体を含むメモリ１１５に連結される。プロセッサ１１０は、またストレージ装置１２０、及びイーサネット（登録商標）コネクタ又はワイヤレスコネクタなどのネットワークコネクタ２１０に連結される。プロセッサ１１０は、またバス２１５に連結され、バス２１５は、他の構成要素のうちのユーザーインターフェース２２０及び入出力エンジン２２５を使用して管理される入力／出力インターフェースポートに装着される。
【００４８】
図３は、他のアプローチを使用して同一のデータを伝達する図１のストレージ装置１２０及び図１のプロセッサ１１０を示す図である。１つのアプローチ（一般的なアプローチ）で、データは、ストレージ装置内のストレージ３０５（例えば、ハードディスクドライブ上のプラッター（ｐｌａｔｔｅｒ）又はＳＳＤなどのようなフラッシュメモリストレージ装置内のフラッシュメモリチップである）から読み取られ、プロセッサ１１０に直接伝送される。ストレージ装置１２０上に格納された（エンコーディングされた及び／又は圧縮された）データの総計がＸバイトである場合、これはプロセッサ１１０に伝送されるデータの量である。この分析は、エンコーディング及び／又は圧縮されたデータを格納するのに使用されるストレージの量を考慮しており、エンコーディング及び圧縮されていないデータは、おそらくより多くのバイト数である（そうでない場合には、データをエンコーディング及び／又は圧縮するのに利点がないことが有る）。従って、例えばデータがエンコーディング及び圧縮されていない約１０ＧＢのストレージを使用することができるが、エンコーディング及び／又は圧縮される際に約５ＧＢのストレージを使用する場合、約１０ＧＢではない約５ＧＢのデータがストレージ装置１２０からプロセッサ１１０に伝送される。
【００４９】
データを伝送するために提供された帯域幅（そして結果的に伝送に影響を与える使用された時間）の観点から、ストレージ１２０からプロセッサ１１０へのデータ伝送を考慮する。ストレージ装置１２０に格納されたデータがエンコーディング及び／又は圧縮される場合、ストレージ装置１２０に格納されたデータがプロセッサ１１０に直接伝送される場合（矢印３１０を介して示される）には、ストレージ装置１２０に格納されたデータの総計は、毎秒Ｂバイトの有効速度で伝送される。上述した例を続けると、ストレージ装置１２０とプロセッサ１１０との間の連結が毎秒約１ＧＢの帯域幅を含む状況を考慮する。エンコーディング及び／又は圧縮されたデータは約５ＧＢの空間を占有できるため、エンコーディング及び／又は圧縮されたデータは、総計５秒の間に約１ＧＢ／秒のデータの伝送速度で伝送される。しかし、（エンコーディング及び／又は圧縮の前に）格納されたデータの総計は約１０ＧＢであるため、データの有効伝送率Ｂは、毎秒約２ＧＢである（約１０ＧＢのエンコーディング及び圧縮されないデータが約５秒内に伝送されるため）。
【００５０】
対照的に、インストレージプロセッサ（ｉｎ−ｓｔｏｒａｇｅ  ｐｒｏｃｅｓｓｏｒ）３１５がプロセッサ１１０に伝送されるデータの量を減少させるために、データをプリプロセッシング（ｐｒｅ−ｐｒｏｃｅｓｓ）するために使用すると、より少ないローデータが伝送され得る（インストレージプロセッサ３１５が、伝送されるデータに対してより選択的なものであるため）。一方、インストレージプロセッサ３１５は、データを圧縮解除してプロセッシングする。（また、可能な限りデータをデコーディングすることもできる）。従って、インストレージプロセッサ３１５からプロセッサ１１０に伝送されるデータの量は、データの選択によって減少するが、圧縮の量（及び可能な限り、エンコーディング）によって増加する。即ち、代数的には、インストレージプロセッサ３１５からプロセッサ１１０に伝送されるデータ（矢印３２０を介して図示する）は、「Ｘ×Ｙ×Ｚ」のＧＢで表現され、ここで、「Ｘ」はエンコーディング及び／又は圧縮されたデータを格納するために使用される領域の容量であり、「Ｙ」は圧縮率（圧縮（及び可能な限りエンコーディング）を使用して減少されたデータ貯蔵量）であり、「Ｚ」は選択率（圧縮されていないデータからどのくらい多くのデータが選択されるか）である。同様に、データがインストレージプロセッサ３１５からプロセッサ１１０に伝送することができる有効速度は、「Ｂ×Ｙ×Ｚ」のバイト／秒（ｂｙｔｅ／ｓｅｃｏｎｄ）になる。
【００５１】
２つの公式の簡単な比較は、インストレージプロセッサ３１５を使用してプロセッサ１１０に伝送するデータを選択することが「Ｘ×Ｙ×Ｚ＜Ｘ（又はＢ×Ｙ×Ｚ＜Ｂ）」である場合、即ち「Ｙ×Ｚ＜１」のときに優秀さを示す。そうでない場合、インストレージプロセッサ３１５によってプリプロセッシングした後、伝送されるデータの量は、インストレージプロセッサ３１５が選択性を適用しなくても、エンコーディング及び／又は圧縮されたデータの量よりも大きい。即ち、インストレージプロセッサ３１５がプロセッサ１１０に伝送するデータを選択しようと試みるよりも、元のエンコーディング及び／又は圧縮されたデータを伝送する方がより効率的である。
【００５２】
図４は、本発明の一実施形態によるトランスコーディングデータを交換する図１のストレージ装置１２０及びプロセッサ１１０を示す図である。図４に示すように、エンコーディング及び／又は圧縮されたデータは、ストレージ３０５に格納される（ストレージ３０５は、ハードディスクドライブのプラッター、ＳＳＤなどのようなフラッシュメモリストレージ装置のフラッシュメモリチップ、又はいくつかの物理的なデータストレージ）。このデータ（圧縮データ４０５）は、圧縮解除器４１０に伝送され、圧縮解除器４１０は、データを圧縮解除して圧縮解除データ４１５を生成する。圧縮解除器４１０（又は圧縮解除エンジン）は、ハードウェア圧縮解除、又は適切な回路（汎用プロセッサ、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、又はＧＰＧＰＵ（Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  ＧＰＵ））で実行されるソフトウェアを使用して実装される。圧縮解除データ４１５は、エンコーディングとは圧縮が別のプロセスであり得るため、追加でエンコーディングされる。圧縮解除データ４１５は、データに対するトランスコーディングを行うトランスコーダ４２０に伝達される。トランスコーディングは、１つのエンコーディングから別のエンコーディングにデータを変換するプロセスと考えられる。
【００５３】
上述した全てのプロセスは、ストレージ装置１２０内で発生する。トランスコーダ４２０が圧縮解除データ４１５をプロセッシングしてトランスコーディングされたデータ４２５を生成すると、トランスコーディングされたデータ４２５は、ホストコンピュータ１０５に提供される。デコーダ４３０は、トランスコーディングされたデータ４２５をデコーディングしてフィルタリングされたプレーンデータ（ｐｌａｉｎ  ｄａｔａ）４３５を生成する。フィルタリングされたプレーンデータ４３５は、プロセッサ１１０に提供され、その後に、フィルタリングされたプレーンデータ４３５に対して所望の動作が遂行される。
【００５４】
デコーダ４３０が、トランスコーディングされたデータ４２５をデコーディングするのは、トランスコーディングされたデータ４２５に適用されたエンコーディングに関する何かを知っているものを含むことに注目しなければならない。この情報は、例えばトランスコーディングされたデータ４２５に使用された特定のエンコーディング方式、又はトランスコーディングされたデータ４２５に使用された辞書を含む。図４は、この情報が、ストレージ装置１２０からホストコンピュータ１０５に伝達されることを示していないが、この情報は、トランスコーディングされたデータ４２５と並列に（又はその一部として）ホストコンピュータ１０５に伝達される。勿論、トランスコーディングされたデータ４２５が実際にエンコーディング及び圧縮されていない場合（トランスコーダ４２０の演算結果がエンコーディング及び圧縮されていないデータを伝送するよりも多くの数の実際のバイトを伝送する場合に発生する）に、トランスコーディングされたデータ４２５は、エンコーディング方式又は辞書に関する情報を省略することができる。
【００５５】
この時点で、エンコーディングと圧縮との違いを説明する価値がある。データの貯蔵に使用されるストレージの量を減らそうとする２つの概念が関連付けられているが、いくつかの違いがある。エンコーディングは、直接含まれるのに長すぎで比較的少ない数の区別される値を有するデータにインデックスを提供する辞書を使用することを一般的に伴う。例えば、他の１９５カ国があり、データが多数の人々の国籍に関する情報を格納した場合、各自の国籍を直接含むことは、少なくとも数バイト（国の名前から文字当たり１バイトと仮定する）を使用するなど、多くの量の空間を使用するようになる。一方、１〜１９５の値は、全て単一のバイトを使用して表現することができる。辞書を使用して国の名前を示すのに適した国の名前のインデックスをデータに格納すると、情報の損失なしに格納されるデータの量が大幅に減少する。例えば、「米国、米国、韓国、韓国、韓国、中国、インド、中国、中国、中国、中国、中国、米国」という情報は、代わりに、表１に示す辞書で表すことができ、「３，３，２，２，２，２、０，１，０，０，０，０，０，３」と表され、１５３個文字から４０個文字に減る。辞書に５２個文字を使用することを考慮しても、簡単に辞書を使用することはコストを大幅に節約することができる。
【００５６】
【表１】
2020178347.tif 000003
【００５７】
辞書の値は、辞書になる値の数が大きいほど減少する。例えば、１，０００，０００個の異なる可能な値がある場合、各インデックスは、２０ビットを使用して格納され得る。勿論、これは、まだ値を直接格納するために使用されるビット数よりも少なくなり得るが、（エンコーディングされていないデータを格納することに関連付けられた）エンコーディングの利点が減少する。そして、データの各項目について格納される値が固有であるか、又はインデックスを格納するために使用される空間のサイズが値を格納するために使用される空間のサイズと略同一である場合、辞書を利用するエンコーディングを使用することは、実際に格納されるデータの量を増加させる。続いて、人々に関するデータの例を挙げると、辞書を使用して年齢を格納することは年齢を直接格納するよりも効率的ではない。
【００５８】
一方、圧縮は、一般的にハフマンコード（Ｈｕｆｆｍａｎ  ｃｏｄｅ）のようなエンコーディング方式を使用する。各データの相対的な頻度を決定するためにデータが分析されて、より頻繁なデータにより短いコードが割り当てられ、それほど頻繁ではないデータにより長いコードが割り当てられる。モールスコード（Ｍｏｒｓｅ  ｃｏｄｅ）は、ハフマンコードではないが、より頻繁なデータには短いシーケンスを使用し、それほど頻繁ではないデータには長いシーケンスを使用するよく知られているコードの例である。例えば、文字「Ｅ」は、シーケンス「ドット（ｄｏｔ）」（空白が続く）で表される一方、文字「Ｊ」は、シーケンス「ドット（ｄｏｔ）ダッシュ（ｄａｓｈ）ダッシュダッシュ」（空白が続く）で表される。（モールスコードは空白を使用して１つの記号が終わり他の記号が開始される位置を示し、そして１つの記号に対するシーケンスは他の記号に対するシーケンスの接頭辞であるために（「Ｅ」は、ドットで表示されるが、一方「Ｊ」はドットで始まるが他の記号を含む）、モールスコードは、適切なハフマンコードではないが、多くの人がモールスコードにどの程度慣れているため、より頻繁なデータのためにより短い記号を使用して、あまり頻繁ではないデータに対する記号としてより長いコードを使用するコードの一般的な有用な例になるようにする）。
【００５９】
再びエンコーディング方式に戻って、一旦辞書が設定されると、データを追加でエンコーディングするために使用されるいくつかの他のエンコーディング方式が存在する。このようなエンコーディング方式の例は、ランレングスエンコーディング（Ｒｕｎ  Ｌｅｎｇｔｈ  Ｅｎｃｏｄｉｎｇ：以下、ＲＬＥ）、ビットパッキング、接頭辞エンコーディング、クラスターエンコーディング、スパースエンコーディング、及び間接エンコーディングを含む。即ち、本発明の実施形態は、他のエンコーディング方式を、なお使用することもできる。ランレングスエンコーディング（ＲＬＥ）及びビットパッキングは、後で多様な例で使用するため、ここで説明する。そして他のエンコーディング方式に関する情報は、簡単に見つけることができる。
【００６０】
ＲＬＥ（Ｒｕｎ  Ｌｅｎｇｔｈ  Ｅｎｃｏｄｉｎｇ）は、値がしばしばグループで発生するという前提に依存する。各値を別途に格納する代わりに、その値の単一のコピーが、その値がデータでどの位の頻度で発生したかを示す数字と共に格納される。例えば、値「２」が連続して４回発生した場合に、値「２」を４回格納（４バイトのストレージを使用する）する代わりに、値「２」の発生回数（「４」）と共に格納する（２バイトのストレージを使用する）。従って、上記の例を続けると、シーケンス「３，３，２，２，２，２，０，１，０，０，０，０，０、３」は、「［２、ＲＬＥ］、３、［４、ＲＬＥ］、２、［１、ＲＬＥ］、０、［１、ＲＬＥ］、１、［５、ＲＬＥ］、０、［１、ＲＬＥ］、３」で表すことができる。「［２、ＲＬＥ］、３」エンコーディングは、ＲＬＥを使用してエンコーディングされた情報があることを意味するものと理解される。即ち、値は「３」であり、この値は２回繰り返される。他のＲＬＥエンコーディングは類似である（表現にＲＬＥエンコーディングが使用されるインジケーターが含まれる理由は、下の図７を参照して説明するハイブリッドエンコーディング方式の潜在的な使用に関連がある）。このシーケンスは、総計１２バイトを使用する。即ち、各エンコーディングに対して、１バイトは次の値が繰り返される回数を格納し、１バイトは繰り返す値を格納する。
【００６１】
元のシーケンスを格納するための１４バイトと比較すると、１２バイトはデータを格納する空間のサイズを大きく減らさない。しかし、比例的にこのエンコーディングは、このデータに必要なストレージの量が約１４％を削減させることを示す。約５ＧＢを占めるデータは、使用されるストレージで約１４％が減少しても相当な節約であり、約７００ＭＢが節約される。
【００６２】
各値の発生回数の代案として、各グループのスタート位置が格納され得る。各値の発生回数の代わりにスタート位置を使用する場合に、データは「［０、ＲＬＥ］、３、［２、ＲＬＥ］、２、［６、ＲＬＥ］、０、［７、ＲＬＥ］、１、［８、ＲＬＥ］、０、［１３、ＲＬＥ］、３」で表すことができる。
【００６３】
上述した説明は、ＲＬＥを使用して繰り返される値が単一のバイトに合った状況を説明する。そうでない場合、例えば、繰り返される値が「１０００」の場合（「１０００」は、１０ビットを使用して格納することができる）には、どのようになるか？この場合、ＲＬＥは、７ビットのグループで値をシリアル化することができる。バイトで最上位のビットである各バイトの８番目のビットは、バイトが他のバイトで継続されるか否かを示す。
【００６４】
例えば、値「１０００」を考慮すると、「１０００」の値は、２進値で「１１  １１１０  １０００」で表現される。この表現は、１０ビットを使用するために単一のバイトで格納するのには値が大きすぎる。従って、値は７ビットのグループに分けられる（各グループに７ビットを含むように先行ゼロが追加される）。即ち、「００００１１１  １１０１０００」である。今、シーケンスの１番目のバイトの前に「１」を付けてその値が示す値が次のバイトで続くことを示し、シーケンスの２番目のバイトの前に「０」を付けてその値がそのバイトで終わることを示す。従って、ビットシーケンスは、「１００００１１１  ０１１０１０００」となる。システムが、このビットシーケンスを読み取る場合、システムは、各バイトの最上位のビットを見てから、その値がそのバイト以上で持続されるか、又はそのバイトで終わるかを確認し、ビットシーケンスを値に再びアセンブルするときに、そのビットを除去することを知る。従って、「１００  ００１１１  ０１１０１０００」は、「００００００１１１１１０１０００」になり（２つの追加の先行ゼロを追加して表現を最大２バイトまで導く）、元の値「１０００」を回復することができる。
【００６５】
勿論、各バイトで、１つのビットがバイト値の連続であるか否かを識別するのに使用される場合に、そのビットは値の一部として使用されない。従って、値が単一のバイトに合っても他のバイトでの値が継続されていないことを示す追加のビットが含まれる。なお、値が、８ビットに合っているが７ビットには合わない場合（例えば、１２８〜２５５の値）、次のバイトで値を継続するか否かを示すビットを使用する場合に２バイトを使用して全体の値を表すことができる（値の最上位のビットが、エンコーディングで次の７ビットのグループに移動するため）。
【００６６】
ＲＬＥを使用する際、ビット及び／又はバイトは、任意の所望の順序で提示され得る。例えば、ビットは、最上位のビットから最下位のビットに、又は最下位のビットから最上位のビットに提供され、バイトは２つの方式で同様に整列される。従って、例えばバイトが最下位から最上位に提示されるが各バイトのビットが最上位から最下位に提示されて連続ビットを使用する場合、値「１６３８４」は「１０００００００  １０００００００  ０００００００１」でエンコーディングされる。このビットシーケンスは、次のように解釈される。即ち、各バイトの１番目のビットは、連続ビットである（「１」は次のバイトが値を継続することを示し、「０」は値が次のバイトで継続されないことを示す）。連続ビットを除去した後、残っているのは「０００００００  ０００００００  ００００００１」である。バイトが最上位から最下位に並べ替えるときに（及び先行ゼロを捨てることで既存の８ビットのグループに再構成する）、値は「０１００００００  ００００００００」になり、これは値「１６３８４」の２進値に対応する。
【００６７】
一方、ビットパッキング（Ｂｉｔ  Ｐａｃｋｉｎｇ）は、値が全体バイトよりも少ないビットを使用できるというアイデアを利用する。例えば、格納される値が０、１、２、及び３を含む場合には、２ビットが各々の値を表すのに使用される。全体のバイトは、各々の値を格納するために使用されるが、全体のバイトを使うというのは、ストレージの７５％が実際に使用されていないことを意味する。ビットパッキングは、単一のバイト（又はバイトシーケンス）に１つ以上の値を格納してこの現象を活用する。ビットパッキングは、値のシーケンスが単一の値ではなく繰り返されるときに特に有利である。
【００６８】
例えば、シーケンス「０，１，０，１、０，１，０、１」を考慮し、約４ビットを使用して各値を独特に識別する状況（即ち、１５よりも大きい値は使用されない）を考慮すると、各値を別途に格納する代わりに（総計８バイト必要）、「［４、ＢＰ］０、１」のエンコーディングを使用する。このエンコーディングは、単一のバイトが値「０」を示す４ビット及び値「１」を示す４ビットを格納し、そのバイトが４回繰り返されることを示す。（ＲＬＥエンコーディングのように、ビットパッキングのエンコーディングは、データがハイブリッドエンコーディング方式で使用するためにビットパッキンを利用してエンコーディングされたとのインジケーターを含む。）１番目のバイトはグループのデータが繰り返される回数を表し、２番目のバイトはグループ自体に値を格納する。このエンコーディングは、データを格納するために約２バイトを使用し、その結果、シーケンスに使用されるストレージの量が約７５％減少する。
【００６９】
ビットパッキングを使用する際、データは任意の所望の方式でパッキングされる。例えば、各々の値が４ビットを使用するシーケンス「０，１」をパッキングする場合、シーケンスは「０００１００００」（最下位のビットから最上位のビットに値をパッキング）又は「０００００００１」（最上位のビットから最下位のビットの値をパッキング）で表される。ビットパッキングのいくつかの実施は、２つの戦略のいずれか１つを使用するが、ビットがストリームに配置される順序を逆にする（最下位のビットに該当するものが、先に来るように）。ビットパッキングでビットをパッキングするために他の技術が使用されることもある。
【００７０】
勿論、ビットパッキングは、単一のバイトに合うグループを限定しない。ＲＬＥと同様に、ビットパッキングの値は、ビットを使用して値が次のバイトで継続されるか否かを識別する。
【００７１】
エンコーディング及び圧縮の両方は、データ表現を格納するために使用される空間を減らそうとするため、その利点が倍数的に増加しないことが有り得る。エンコーディング及び圧縮の両方は、データの格納に使用される空間を減らすことを試みる。しかし、データが（エンコーディングのような）１つの方式で圧縮されると、（圧縮のような）他の圧縮方式を適用することが助けにならない可能性がある。圧縮は、データがエンコーディングされた後にデータに適用され、まだ使用されているストレージの量をわずかに減少させることができるが、エンコーディングデータに対する圧縮の影響は、エンコーディングされていないデータに対する圧縮の利点よりも少なくなる。（圧縮されるデータに関係なしに、データを圧縮する全ての方式を同一の利点で適用することができると、単純に繰り返された圧縮方式を適用するだけでも、任意の全てのデータを非常に小さいサイズに減らせることを希望するだろうが、少しだけ考えてみると、容易に明白であるように、そのような結果は現実の世界では現実的ではない。）
【００７２】
図５は、図１のストレージ装置１２０の詳細を示す図である。図５を参照すると、ストレージ装置１２０はＳＳＤとして示されているが、本発明の実施形態は、適切な修正により、ストレージ装置１２０のための他の形態をサポートすることができる。図５に示すように、ストレージ装置１２０は、ホストインターフェース層（ＨＩＬ）５０５、ＳＳＤコントローラ５１０、及び多様なフラッシュメモリチップ（５１５−１〜５１５−８）（また「フラッシュメモリストレージ」ともいう）を含み、これは、多様なチャネル（５２０−１〜５２０−４）に連結される。ホストインターフェース層５０５は、ストレージ装置１２０と図１のマシン１０５との間の通信を管理する。これらの通信は、ストレージ装置１２０からデータを読み出す読み取り要請、及びストレージ装置１２０にデータを書き込む書き込み要請を含む。ＳＳＤコントローラ５１０は、フラッシュメモリコントローラ（図５に図示せず）を使用して、フラッシュメモリチップ（５１５−１〜５１５−８）上のガベージコレクション及び他の動作と共に読み取り及び書き込みの動作を管理する。
【００７３】
ＳＳＤコントローラ５１０は、変換レイヤ５２５（フラッシュ変換レイヤ（ＦＴＬ）ともいう）を含む。変換レイヤ５２５は、図１のマシン１０５によって提供される論理ブロックアドレス（ＬＢＡ）を、データが実際に格納されているＳＳＤ１２０の物理ブロックアドレス（ＰＢＡ）に変換する機能を遂行する。このような方式で、図１のマシン１０５は、データが実際に格納されるストレージ装置１２０上の物理アドレスを知らなくても、それ自身の固有のアドレス空間を使用してデータを参照することができる。これは、例えばデータがアップデートされるときに有利である。即ち、ストレージ装置１２０はデータを元の位置でアップデートしないことが有り得るため、ストレージ装置１２０は既存のデータを無効にしてストレージ装置１２０上の新たなＰＢＡにアップデートを記録する。また、ガベージコレクションのために選択されたブロックにデータが格納されている場合に、そのデータはブロックが消去される前にストレージ装置１２０上の新たなブロックに記録される。変換レイヤ５２５をアップデートすることにより、図１のマシン１０５は、データが他の物理ブロックアドレス（ＰＢＡ）に移動するにつれてデータが実際に格納される位置から分離される。
【００７４】
ＳＳＤコントローラ５１０は、またファイルブロックマップ５３０を含む。ファイルブロックマップ５３０は、ファイルに対するデータを格納するのにどのようなブロックが使用されるかを指定する。ファイルブロックマップ５３０は、例えばデータがカラムフォーマットで格納されるときに使用される。ファイルブロックマップ５３０は、変換レイヤ５２５の一部であるか（この場合、ファイルブロックマップ５３０は、ストレージ装置１２０の個々の構成要素とみなされないことがある）、変換レイヤ５２５を補完するか、（例えば、変換レイヤ５２５は比較的少ない数のブロックを利用するデータに使用されるのに対し、ファイルブロックマップ５３０は比較的多くの数のブロックを利用するデータに使用される）、又は変換レイヤ５２５を完全に代替する（この場合、変換レイヤ５２５は、ＳＳＤコントローラ５１０に存在しない）。
【００７５】
ＳＳＤコントローラ５１０は、またトランスコーダ４２０を含む。しかし、本発明の実施形態は、ストレージ装置１２０内の他の場所にトランスコーダ４２０を有する構成を含むか（例えば、トランスコーダ４２０は、多くの可能性の中でもストレージ装置１２０内の他の位置の汎用プロセッサ（適切なソフトウェアを実行）、ＦＰＧＡ、ＡＳＩＣ、ＧＰＵ、又はＧＰＧＰＵを使用して実施）、又はストレージ装置１２０の外部にさえ存在することもできる。
【００７６】
ストレージ装置１２０は、またストレージ装置１２０に格納されたデータを使用する方法を制御する命令語を実行する図３のインストレージプロセッサ３１５（図５には図示せず）を含み得る。また、図３のインストレージプロセッサ３１５は、図１のプロセッサ１１０の代わりにストレージ装置１２０上でローカルに動作を実行するために、インストレージコンピューティング機能のために使用される。トランスコーダ４２０のように、図３のインストレージプロセッサ３１５は、ストレージ装置内のどこかに位置する汎用プロセッサ（適切なソフトウェアを実行する）、ＦＰＧＡ、ＡＳＩＣ、又はＧＰＵを使用するか、又はストレージ装置１２０の外部にさえ実装され得る。
【００７７】
図５は、４つのチャンネル（５２０−１〜５２０−４）で構成される８つのフラッシュメモリチップ（５１５−１〜５１５−８）を含むストレージ装置１２０を図示するが、本発明の実施形態は、任意の数のチャンネルで構成された任意の数のフラッシュメモリチップをサポートすることができる。同様に、図５は、ＳＳＤコントローラ５１０がトランスコーダ４２０及び／又は図３のインストレージプロセッサ３１５を含むことを示すが、本発明の実施形態は、図５とは異なり、トランスコーダ４２０又は図３のインストレージプロセッサ３１５で構成され得る。
【００７８】
図６は、図４のトランスコーダ４２０の詳細を示す図である。図６を参照すると、トランスコーダ４２０は、入力辞書、入力ストリーム、及びエンコーディングタイプのような多様な入力を受信し、出力辞書及び出力ストリームのような多様な出力を生成する。要するに、トランスコーダ４２０は、エンコーディングタイプによって指定されたエンコーディング方式を使用してエンコーディングされる入力ストリームを取得するように動作し、出力ストリームを生成する。（入力ストリームがエンコーディングされることがあるが、以下の説明では、入力ストリームが圧縮されていない状況を考慮する。即ち、入力ストリームが圧縮されると、入力ストリームは追加のプロセッシングの前に圧縮解除される。）出力ストリームは、入力ストリームと同一のエンコーディング方式、又は異なるエンコーディング方式を使用してエンコーディングされる（又は両方とも、以下で説明するように、ハイブリッドエンコーディング方式が使用される場合、いくつかのデータは１つのエンコーディング方式から別のエンコーディング方式に変更され得る）。
【００７９】
また、入力ストリームと出力ストリームとの間のエンコーディング方式が変更されなくても、エンコーディングそのものが変更され得る。例えば、特定の値が入力辞書及び出力辞書の他のインデックスに指定された場合には、辞書の変更事項が実際のデータに使用された値に反映されなければならない。このため、トランスコーダ４２０は、また入力辞書を取得して出力辞書にマッピングする。
【００８０】
【表２】
2020178347.tif 000004
【００８１】
この最後の２つの要点の例として、上記表１に示されている辞書を再び検討する。今、米国市民に関するデータに関心があった図１のホストコンピュータ１０５が存在する状況を考慮すると、表１は、入力ストリームから受信されたデータを表すため、入力辞書としてみなされる。一方、表２は、出力ストリームのデータを示す出力辞書である。表２に対して、３種類以上の注意事項がある。第１に、表２は表１に示されている４つの項目と比較して２つの項目を含む。第２に、表２には「ドントケア」で表された項目が含まれる（別の名前で使用されても、この時点では、対応する値で表現されたデータは、図１のホストコンピュータ１０５には関心を有していないため）。第３に、「米国（Ｕｎｉｔｅｄ  Ｓｔａｔｅｓ  ｏｆ  Ａｍｅｒｉｃａ）」は表１で「ＩＤ３」を有するが、「米国（Ｕｎｉｔｅｄ  Ｓｔａｔｅｓ  ｏｆ  Ａｍｅｒｉｃａ）」は表２で「ＩＤ１」を有する。この最後の注意事項は、入力ストリームで「ＩＤ３」に対する参照が、出力ストリームで「ＩＤ１」に変更されることがあることを意味する（そうではないと、データに意味がないことが有り得る）。
【００８２】
これらの動作を達成するために、トランスコーダ４２０は、多様な構成要素を含む。トランスコーダ４２０は、サーキュラーバッファ６０５（Ｃｉｒｃｕｌａｒ  ｂｕｆｆｅｒ）、ストリームスプリッタ６１０、インデックスマッパー６１５、現在のエンコーディングバッファ６２０、前のエンコーディングバッファ６２５、トランスコーディングルール６３０、及びルール評価器６３５を備える。
【００８３】
サーキュラーバッファ６０５は、図１のストレージ装置１２０内に位置する図３のストレージ３０５から来るデータストリームを受信する。プロセッシングするデータ全体が大きくなるため（例えば、数ギガバイト（ＧＢ）又はテラバイト（ＴＢ）のデータ）、一度に全てのデータをロードしていくつかのストレージ内でプロセッシングしようとすると非現実的である。従って、入力ストリームは、ストリームとして受信され且つバッファリングされて、データがデータセット全体よりも小さな単位でプロセッシングされるべきである。図６は、バッファ６０５をサーキュラーバッファとして示すが、本発明の実施形態は、入力ストリームから受信されたデータを格納するために、任意のタイプのバッファを使用することができる。
【００８４】
ストリームスプリッタ６１０は、サーキュラーバッファ６０５からのデータを取得し、そのデータをチャンクに分割する。チャンクは、その後にインデックスマッパー６１５に伝達される。チャンクは、トランスコーダ４２０内の他の構成要素によってプロセッシングされるデータの単位を示し、その用語が別のコンテキストで使用され得るため、用語「チャンク」と混同してはならない（例えば、その用語である「カラムチャンク」は、下の図９を参照して、使用される）。
【００８５】
図７は、入力ストリームの一部（又は全部）である入力エンコーディングデータをチャンクに分割する図６のストリームスプリッタ６１０を示す図である。図７において、入力データは、他のデータの中から３つのエンコーディングデータである「［１、ＢＰ］、３、３、［４、ＲＬＥ］、２、［５、ＲＬＥ］、０」を含むものとして示される。上述したように、これらのチャンクは、ビットパッキング及びＲＬＥエンコーディング方式を使用してエンコーディングされたデータを示す。このエンコーディングは、「３，３，２，２，２，２、０，０，０，０，０」の値の（エンコーディングされていない）のシーケンスを示す。個々のエンコーディングに対して、図１のホストコンピュータ１０５が、そのデータ（又はそのデータの一部）に関心があることもあり、関心がないこともある。図１のホストコンピュータ１０５が各々のエンコーディング値に関心かあるか否かは、トランスコーディングルール６３０に依存する。即ち、図６のストリームスプリッタ６１０は、図１のホストコンピュータ１０５がどのようなデータに関心を有するか知らないことが有り得る。従って、図６のストリームスプリッタ６１０は、入力データストリームを、各チャンクが異なるピース（ｐｉｅｃｅ）のエンコーディングデータを含むチャンクに分割する。従って、チャンク（７０５−１）は「［１、ＢＰ］、３、３」のエンコーディングを含み、チャンク（７０５−２）は「［４、ＲＬＥ］、２」のエンコーディングを含み、チャンク（７０５−３）は「［５、ＲＬＥ］、０」のエンコーディングを含む。
【００８６】
図７に対して、注意すべき少なくとも２つの追加の要点が存在する。第１に、図７に示した例としての入力ストリームにも留意しなければならないが、いくつかのデータはビットパッキングを使用してエンコーディングされ、いくつかのデータはＲＬＥを使用してエンコーディングされる。仮に、全てのデータが単一のエンコーディング方式（例えば、ＲＬＥ）を使用してエンコーディングされる場合、図６のストリームスプリッタ６１０は、図６のトランスコーダ４２０に入力されたエンコーディングタイプから事実を決定することができる。しかし、時には、ハイブリッドエンコーディング方式が使用されることもある。ハイブリッドエンコーディング方式で、いくつかのデータは単一のエンコーディング方式（例えば、ＲＬＥ）を使用してエンコーディングされ、いくつかのデータは他のエンコーディング方式（例えば、ビットパッキング）を使用してエンコーディングされる（概念は、ハイブリッドエンコーディング方式で使用されたエンコーディング方式を２つ以上に一般化することもある）。ハイブリッドエンコーディング方式で、その情報そのものだけではどのようなエンコーディング方式でどのようなデータがエンコーディングされるかをストリームスプリッタ６１０に教えてくれないため、図６のトランスコーダ４２０は、エンコーディングタイプを入力として受信しないことも有る。代わりに、図６のストリームスプリッタ６１０は、チャンクそのものを見て各々のチャンクにどのようなエンコーディング方式が使用されるかを決定する。
【００８７】
特定のチャンクをエンコーディングするために使用されるエンコーディング方式を決定する１つの方法は、チャンク内の特定のビットの値を検査するものである。例えば、カラムのストレージフォーマットは、１番目のバイトの最下位のビットを使用することにより、ＲＬＥ又はビットパッキングを利用して特定のデータチャンクがエンコーディングできるかどうかを示す。即ち、そのビットの値が「０」の場合にはＲＬＥが使用され、そのビットの値が「１」の場合にはビットパッキングが使用される。その次に、このビットはバイトから除去され、残りのビットは論理的に１ビット右にシフトされてエンコーディングに使用される値を生成する。
【００８８】
例えば、第１のチャンク（７０５−１）を考慮すると、第１のチャンク（７０５−１）は、ビットシーケンス「００００００１１  ００１１００１１」を含む。図６のストリームスプリッタ６１０が第１のバイトの「００００００１１」を読み取ると、図６のストリームスプリッタ６１０は、最下位のビット（最後の「１」）を検査する。最下位のビットは「１」であるため、図６のストリームスプリッタ６１０は、このチャンクがビットパッキングを使用してエンコーディングされると決定する。この最下位のビットが除去され、第１のバイトの残りのビットが論理的に右に１ビットずつシフトされてバイト「０００００００１」が生成される。このバイトの１番目の（最上位）ビットは「０」であるため、図６のストリームスプリッタ６１０は、バイトが単に「０００００００１」（次のバイトでの値が継続されない可能性があることを示す「０」のビットが除去され、また他の先行ゼロが追加される）であること、及びグループ（決定されるべき）が一回繰り返されることを示すことを決定する。その後、図６のストリームスプリッタ６１０は、次のバイト「００１１００１１」を読み取る。このバイトの最上位のビットは「０」であるため、図６のストリームスプリッタ６１０は、この値が次のバイトで継続されていないことを知る。連続ビットが除去され、先行ゼロが追加されて「００１１００１１」の値を生成し、これは「３」及び「３」の値を示す。従って、図６のストリームスプリッタ６１０は、エンコーディングがビットパッキングを使用して値「３」が２回繰り返されることを示すものと決定する。
【００８９】
一方、第２のチャンク（７０５−２）を考慮すると、第２のチャンク（７０５−２）は、ビットシーケンス「００００１０００  ００００００１０」を含む。図６のストリームスプリッタ６１０は、第１のバイト「００００１０００」を読み取ると、最下位のビット（最後の「０」）を検査する。最下位のビットは「０」であるため、図６のストリームスプリッタ６１０は、このチャンクがＲＬＥを使用してエンコーディングされると決定する。この最下位のビットが除去され、１番目のバイトの残りのビットが論理的に右に１ビットずつシフトされてバイト「０００００１００」が生成される。このバイトの１番目の（最上位）ビットは「０」であるため、図６のストリームスプリッタ６１０は、バイトが単に「０００００１００」（次のバイトで値が継続されないことを示す「０」のビットが除去され、また他の先行ゼロが追加される）であること、及びその値（決定されるべき）が４回繰り返されることを示すことを決定する。その後、図６のストリームスプリッタ６１０は、次のバイト「００００００１０」を読み取る。このバイトの最上位のビットは「０」であるため、図６のストリームスプリッタ６１０は、この値が次のバイトで続行されないことを知る。連続ビットを除去して、先行ゼロを追加して「００００００１０」の値を生成する。従って、図６のストリームスプリッタ６１０は、エンコーディングがＲＬＥを使用して値「２」が４回繰り返されることを示すものと決定する。
【００９０】
勿論、図６のストリームスプリッタ６１０は、ビットシーケンスに対してこの分析の両方を遂行しないことがある。図６の全てのストリームスプリッタ６１０は、最上位のビットである「０」があるバイトが表されるまでバイトを読み取ってから（このバイトシーケンスは、エンコーディング方式と次に来る値の繰り返し回数を示す）、最上位のビット「０」を有する他のバイトが発生するまでバイトを読み取る（このバイトシーケンスは、エンコーディングされる値を示す）。図６のストリームスプリッタ６１０は、読み取られたビット（エンコーディングされたチャンクの全体を示す）を、図６のインデックスマッパー６１５に伝達する（そして、図６のルール評価器６３５による今後のプロセッシングのために）。即ち、図６のインデックスマッパー６１５（及び／又は図６のルール評価器６３５）は、チャンクにどのようなエンコーディング方式が使用され、そしてどのような値がそのようにエンコーディングされるかを決定するために説明した分析を遂行する。しかし、図６のストリームスプリッタ６１０（又は図６のインデックスマッパー６１５又は本発明の任意の他の構成要素）が特定のデータチャンクをエンコーディングするために使用されるエンコーディング方式を決定するために分析を遂行する場合、図６のストリームスプリッタ６１０（又は図６のインデックスマッパー６１５又は他の構成要素）は、このような分析の繰り返しを避けるために、エンコーディングタイプを他の構成要素に伝達する。この動作は、チャンクがプロセッシングされるときにエンコーディング方式を識別するビットがチャンクから除去される場合には、特に重要である。即ち、エンコーディングのタイプがない場合、エンコーディングのデータを後でプロセッシングする構成要素は、エンコーディングのデータを正しくプロセッシングできないことがある。
【００９１】
第２に、第２及び第３のチャンク（７０５−２及び７０５−３）は、両方共にＲＬＥを使用してエンコーディングされた連続的なチャンクを示すことに留意しなければならない。図６のストリームスプリッタ６１０は、全ての連続的なＲＬＥエンコーディングを単一のチャンクとみなすと予想する（他のエンコーディング方式を使用してチャンクを分割する）。しかし、その目的は、入力ストリームをトランスコーディングして関心のない全てのデータを単一の「ドントケア」値に統合することを覚えなければならない。図６のストリームスプリッタ６１０は、図１のホストコンピュータ１０５が関心のあるデータに対する情報を有しないことを思い出そう。図６のストリームスプリッタ６１０が同一のエンコーディング方式を使用する全てのエンコーディングを同一のチャンクと見なす場合、図６のストリームスプリッタ６１０は、最終的に、図１のホストコンピュータ１０５が関心のあるデータを関心のないデータと混合することになる。更に、入力ストリーム内の全てのデータが同一のエンコーディング方式を使用してエンコーディングされた場合、全体の入力ストリームは単一のチャンクとみなされ、これは図６のトランスコーダ４２０の一部としてストリームスプリッタ６１０の有用性を排除する。
【００９２】
第３に、上述した説明は、２つの異なるエンコーディング方式を区別するために、１ビットを使用するハイブリッドエンコーディング方式に焦点を当てているが、本発明の実施形態は、２つ以上の別個のエンコーディング方式を使用するハイブリッドエンコーディング方式に一般化される。勿論、２つ以上のエンコーディング方式が使用される場合は、１つ以上のビットが異なるエンコーディング方式を区別するために使用される。例えば、３つ又は４つのエンコーディング方式が使用される場合、２つのビットがエンコーディング方式を区別するために使用され、５つ、６つ、７つ、又は８つの異なるエンコーディング方式が使用される場合、３つのビットが異なるエンコーディング方式を区別するために使用される等である。
【００９３】
（エンコーディング方式を区別するために使用されたビットは、他の目的のためにも使用されることがあることに留意しなければならない。例えば、３つのエンコーディング方式が使用される状況を考慮すると、第１のバイトの最下位のビットが特定の値（「０」のような）である場合には、ＲＬＥのような１つのエンコーディング方式が使用され、その次の最下位のビットは値を表すために使用される。しかし、第１のバイトの最下位のビットが他の特定の値（「１」のような）である場合には、その次の最下位ビットは残りの２つのエンコーディング方式（ビットパッキング及びクラスターエンコーディングのような）を区別するために使用される。）
【００９４】
再び図６を参照すると、インデックスマッパー６１５は、ストリームスプリッタ６１０からチャンクを受信する。インデックスマッパー６１５は、入力辞書からのエンコーディングされた値を出力辞書のエンコーディングされた値にマッピングする。例えば、上記表１及び表２に示す辞書を再び検討すると、「米国」に対応する値に関心を有るためにエンコーディングされたチャンクで発見されるとき、「３」の値は「１」の値に置き換えられ、そしてエンコーディングされたチャンクで発見された他の全ての値は「０」の値に置き換えられる。
【００９５】
図８は、入力辞書を出力辞書にマッピングする図６のインデックスマッパー６１５を示す図である。図８を参照すると、インデックスマッパー６１５は、入力辞書８０５を受信して出力辞書８１０を生成するものとして示される。図１のホストコンピュータ１０５がどのようなデータに関心があるかに対する情報が与えられると、インデックスマッパー６１５は、出力辞書８１０を生成する。インデックスマッパー６１５は、また入力辞書８０５から出力辞書８１０へのマップを生成する。上述した例を続けると、このマップは、表３に示したマップを特定することができる。図示したように、「３」は、インデックス「１」にマッピングされ、他の全てのインデックスは、インデックス「０」にマッピングされる。
【００９６】
【表３】
2020178347.tif 000005
【００９７】
インデックスマッパー６１５に対して注目に値するいくつかのポイントがある。第１に、インデックスマッパー６１５は、図６のトランスコーダ４２０とは別の構成として示されるが、インデックスマッパー６１５は、図６のルール評価器６３５と共に動作する（又はその一部として実装される）。第２に、インデックスマッパー６１５がどのように出力辞書８１０（及び表３に示したマップ）を生成するかは、図１のホストコンピュータ１０５が関心のあるデータに依存する。インデックスマッパー６１５が図１のホストコンピュータ１０５の関心のあるデータを学習する方法は、後述する図１１を参照して説明する。第３に、トランスコーディングデータは、入力辞書８０５を出力辞書８１０にマッピングするインデックスマッパー６１５及び図６のトランスコーディングルール６３０の両方を伴う。即ち、図６のトランスコーディングルール６３０は、入力辞書８０５から出力辞書８１０へのマップに依存する。その逆は成立しない。即ち、入力辞書８０５から出力辞書８１０へのマップ（そして、それに伴うインデックスマッパー６１５の動作）は、図６のトランスコーディングルール６３０を参照せずに生成される。
【００９８】
インデックスマッパー６１５に関する第４のポイントは、より微妙である。インデックスマッパー６１５は、出力辞書８１０に「ドントケア」の値という新たな項目を効果的に追加する。実装を単純化するために、インデックスマッパー６１５は、常に「ドントケア」の値に対して同一のインデックスを使用することが理解される。入力辞書８０５のサイズは、データセットに基づいて変化するため、インデックス「０」が常に使用される。
【００９９】
しかし、データセットの全てのデータが図１のホストコンピュータ１０５に関心があることが明らかになればどうなるか？この場合には、インデックスマッパー６１５は、出力辞書８１０に項目を追加したが、出力辞書８１０のどのような項目も除去されなかった。これらの２つの事実の組み合わせは、出力辞書８１０が入力辞書８０５よりも（１つの項目で）より大きくなることを意味する。入力辞書８０５がｎの一部の値に対して正確に２ｎ個の項目を有する状況を考慮すると、この事実は、入力辞書８０５への全てのインデックスがｎビットを使用して表現されることを意味する。出力辞書８１０に「ドントケア」の項目を追加すると、出力辞書８１０に「２ｎ＋１」の項目があることを意味し、これはもはや「ｎ＋１」ビットがデータセットで可能な全ての値を表すために使用されることを意味する。即ち、この問題を「ビットオーバーフロー（ｂｉｔ  ｏｖｅｒｆｌｏｗ）」という。この追加のビットは、エンコーディングデータに影響を与え、データを正しく表すために新たなビットの追加を要求する。従って、出力辞書８１０の単一の小さな変化は、データ表現に莫大な波及効果をもたらし、エンコーディングデータを表すために使用されるストレージ容量を大幅に増加させる。
【０１００】
上述した例は、「ドントケア」の項目の導入が可能な全てのインデックスを出力辞書８１０に示す新たなビットを追加する状況に焦点を当てているが、出力辞書のサイズが、新たなビットが全ての可能なインデックスを表すために使用されるところまで増加される場合にも、同様の問題が発生する。表１に示した入力辞書を再び考慮し、中国及びインドの市民に関心のある（表１の「０」及び「１」のインデックス）、図１のホストコンピュータ１０５が存在する状況を考慮すると、これらのインデックスは、単一のビットを使用して表現される（１ビットは「０」及び「１」の値を表すのに使用されるため）。これらの値を、ビットパッキングを使用してエンコーディングすると、８つのこのような値を単一のバイトでパッキングすることができる。しかし、インデックス「０」が出力辞書８１０の「ドントケア」の値に割り当てられている場合には、中国及びインドのインデックスは、他の値（例えば、「１」及び「２」）にマッピングされる。「２」の値は、２ビットを使用するため、これ以上８つの値を単一のバイトに束ねることができない。即ち、ビットのオーバーフローが発生する。
【０１０１】
ビットオーバーフロー（ｂｉｔ  ｏｖｅｒｆｌｏｗ）の問題に対する使用可能ないくつかのソリューションがある。１つは、入力辞書８０５に対する任意のインデックスが図１のホストコンピュータ１０５に関心のないデータを表すかを確認するものである。入力辞書８０５の全てのデータがホストコンピュータ１０５に関心のあることが判明した場合、入力ストリームをトランスコーディングするのは全く意味がなく、入力ストリームは修正せずに出力ストリームに直接マッピングされる。
【０１０２】
しかし、ビットパッキングでビットオーバーフローの問題が相変わらず発生するため、このソリューションは、有用であるが十分ではない可能性がある。ビットパッキングでビットオーバーフローを避けるために、出力辞書８１０で任意のインデックスを表すのに使用されるビット数が、入力辞書８０５で任意のインデックスを表すのに使用されるビット数よりも大きくないことを保証することが解決策になる。２つの可能な解決策をここで説明する。１つの解決策は、出力辞書８１０で可能な最も高いインデックスを「ドントケア」の値に割り当てるものである。即ち、これは、最初に入力辞書８０５から出力辞書８１０に関心のある全てのインデックスをマッピングした後、使用されていない最も低いインデックスを「ドントケア」の値として使用する。他の解決策は、入力辞書８０５で図１のホストコンピュータ１０５に関心のないインデックスを識別し、そのインデックスを「ドントケア」の値として使用するものである。２つの解決策において、入力辞書８０５へのインデックスは、出力辞書８１０でより大きなインデックスに置き換えられることなく、これはビットオーバーフローの問題を回避することができる。このような解決策の欠点は、入力辞書８０５から独立した「ドントケア（ｄｏ  ｎｏｔ  ｃａｒｅ）」に対するインデックスを選択できない可能性があることである。
【０１０３】
再び図６を参照すると、現在のチャンク（インデックスマッパー６１５によってプロセッシングされる）は、現在のエンコーディングバッファ６２０に格納される。そこから、ルール評価器６３５は、前のエンコーディングバッファ６２５のエンコーディングデータと共に現在のエンコーディングバッファ６２０のエンコーディングデータを評価し、エンコーディングが変更されなければならないか否か及び出力ストリームに出力されるデータを決定する。要するに、ルール評価器６３５は、現在のエンコーディングバッファ６２０のエンコーディングデータが、前のエンコーディングバッファ６２５のエンコーディングデータに結合されるか否かを決定する。そうである場合、現在のエンコーディングバッファ６２０のエンコーディングデータは、前のエンコーディングバッファ６２５のエンコーディングデータに追加される。しかし、そうでない場合、前のエンコーディングバッファ６２５のエンコーディングデータは出力ストリームに出力され、現在のエンコーディングバッファ６２０のエンコーディングデータは前のエンコーディングバッファ６２５に移動する。（この分析は、前のエンコーディングバッファ６２５にデータが存在する状況を考慮する。例えば、第１のデータチャンクで発生する可能性があるように、前のエンコーディングバッファ６２５がデータを含んでいない場合、現在のエンコーディングバッファ６２０のエンコーディングデータを、前のエンコーディングバッファ６２５のトランスコーディングされたデータに結合しようと試みる問題はない。）
【０１０４】
これは、「エンコーディングデータは、いつ結合されるか？」という質問につながる。それに対する短い答えは、図１のホストコンピュータ１０５が関心を有するデータと、ホストコンピュータ１０５が関心を有さないデータとをチャンクが全て示す場合に、エンコーディングされたデータチャンクが結合されるというものである。いくつかの例は、ルール評価器６３５がどのように動作するかを説明するのに役立つ。２つの例で、入力ストリームは同一のデータ（「［１、ＢＰ］、３、３、［４、ＲＬＥ］、２、［１、ＢＰ］、０、１、［５、ＲＬＥ］、１、［１、ＢＰ］、３」を含み、入力辞書は表１に示す通りである。２つの例で、行（ｒｏｗ）は、現在のエンコーディングバッファ６２０及び前のエンコーディングバッファ６２５に存在する「スナップショット（ｓｎａｐｓｈｏｔ）」を示し、そのときの出力ストリームに出力されたものを示す。
【０１０５】
１番目の例で、図１のホストコンピュータ１０５は、米国の市民に関するデータを要請する。表１から分かるように、「米国」のインデックスは「３」である。従って、出力辞書は、表２に示したものと同一である。
【０１０６】
【表４】
2020178347.tif 000006
【０１０７】
表４の第１行に示すように、ルール評価器６３５によってプロセッシングされた第１のチャンクは「［１、ＢＰ］、３、３」である。このチャンクは関心のあるデータ（値「３」）を含むため、値「３」を値「１」に置き換えるために、ルール評価器６３５は、図８の入力辞書８０５から出力辞書８１０へのマップを使用する。その後、このトランスコーディングされたチャンクは、（表４の第２行に示すように）前のエンコーディングバッファ６２５に移動する。
【０１０８】
表４の第２行では、ルール評価器６３５によってプロセッシングされた第２のチャンクは「［４、ＲＬＥ］、２」である。このチャンクは関心のあるデータ（値「２」）を含まない可能性があるため、値「２」を値「０」（このデータが「ドントケアのデータを表す）に置き換えるために、ルール評価器６３５は、図８の入力辞書８０５から出力辞書８１０へのマップを使用する。このチャンクは「ドントケア」のデータを含むが、前のエンコーディングバッファ６２５が関心のあるデータを含むため、前のエンコーディングバッファ６２５のデータは（表４の第３行に示されるように）出力ストリームに出力され、現在のトランスコーディングされたチャンクは（表４の第３行に示されるように）前のエンコーディングバッファ６２５に移動する。
【０１０９】
表４の第３行では、ルール評価器６３５によってプロセッシングされた第３のチャンクは「［１、ＢＰ］、０、１」である。このチャンクは関心のあるデータ（値「０」及び「１」）を含まない可能性があるため、値「０」及び値「１」を値「０」（ドントケアのデータであることを示す）に代替するために、ルール評価器６３５は、図８の入力辞書８０５から出力辞書８１０へのマップを使用する。
【０１１０】
このチャンクは「ドントケア」のデータを含み、前のエンコーディングバッファ６２５は、既に「ドントケア」のデータを含むため、この２つのチャンクは結合される。このチャンクはビットパッキングを使用するが、前のエンコーディングバッファ６２５のチャンクはＲＬＥを使用するため、両方のエンコーディング方式のいずれかが他のエンコーディング方式に置き換えられる。この例で、ビットパッキングのエンコーディングデータは、ＲＬＥを使用してトランスコーディングする。（ビットパッキングを使用して複数の値が単一の値として格納されると、グループ全体が複製され、複製された値の数はパッキングされた値の数の倍数である。一方、ＲＬＥは単一の値を複製する。）結果として、前のエンコーディングバッファ６２５は、今「［６、ＲＬＥ］０」（表４の第４行に示すように）を格納し、これは２番目のチャンクの４つの「ドントケア（ｄｏ  ｎｏｔ  ｃａｒｅ）」の値と３番目のチャンクの２つの「ドントケア」の値とを結合したものである。
【０１１１】
表４の第４行では、ルール評価器６３５によってプロセッシングされた第４のチャンクは「［５、ＲＬＥ］、１」である。このチャンクは関心のあるデータ（値「１」）を含まない可能性があるため、ルール評価器６３５は、値「１」を値「０」（ドントケアのデータであることを示す）に代替するために、図８の入力辞書８０５から出力辞書８１０へのマップを使用する。
【０１１２】
このチャンクは「ドントケア」のデータを含み、前のエンコーディングバッファ６２５は、「ドントケア」のデータを既に含むため、この２つのチャンクは結合される。両方のチャンクは、同一の「ドントケア」の値をエンコーディングするためにエンコーディング方式でＲＬＥを使用するため、ルール評価器６３５は、前のエンコーディングバッファ６２５でチャンクの複製値を増加させることによって２つのチャンクを結合する。その結果、前のエンコーディングバッファ６２５は、今「［１１、ＲＬＥ］０」（表４の第５行に示すように）を格納し、これは２番目のチャンクからの４つの「ドントケア」の値、３番目のチャンクからの２つの「ドントケア」の値、及び４番目のチャンクからの５つの「ドントケア」の値を組み合わせたものである。
【０１１３】
表４の第５行では、ルール評価器６３５によってプロセッシングされた第２のチャンクは「［１１、ＢＰ］、３」である。このチャンクは関心のあるデータ（値「３」）を含むため、値「３」を値「１」に代替するために、ルール評価器６３５は、図８の入力辞書８０５から出力辞書８１０へのマップを使用する。このトランスコーディングされたチャンクは関心のあるデータを含む一方、前のエンコーディングバッファ６２５は「ドントケア」のデータを含むため、トランスコーディングされたチャンクは、前のエンコーディングバッファ６２５のチャンクに結合されない可能性がある。
【０１１４】
この時点で、一般的に前のエンコーディングバッファ６２５のトランスコーディングされたデータは出力ストリームに出力され、現在のトランスコーディングされたチャンクは前のエンコーディングバッファ６２５に移動するはずである。しかし、現在のトランスコーディングされたチャンクは、入力ストリームで最後のチャンクであるため、両方ともトランスコーディングされたチャンクが出力される（勿論、前のエンコーディングバッファ６２５のチャンクが先に出力される）。表４の第６行は、最終的な出力を示す。
【０１１５】
２番目の例で、図１のホストコンピュータ１０５は、韓国の国民に関する資料を要請した。表１から分かるように、「韓国」のインデックスは「２」である。従って、出力辞書は、表５のように表すことができる。
【０１１６】
【表５】
2020178347.tif 000007
【表６】
2020178347.tif 000008
【０１１７】
表６の第１行に示すように、ルール評価器６３５によってプロセッシングされた第１のチャンクは「［１、ＢＰ］、３、３」である。このチャンクは関心のないデータ（値「３」）を含むため、値「３」を値「０」（「ドントケア」のデータであることを示す）に代替するために、ルール評価器６３５は、図８の入力辞書８０５から出力辞書８１０へのマップを使用する。このトランスコーディングされたチャンクは、（表６の第２行に示すように）前のエンコーディングバッファ６２５に移動する。
【０１１８】
表６の第２行で、ルール評価器６３５によってプロセッシングされた第２のチャンクは「［４、ＲＬＥ］、２」である。このチャンクは関心のあるデータ（値「２」）を含むため、値「２」を値「１」に代替するために、ルール評価器６３５は、図８の入力辞書８０５から出力辞書８１０へのマップを使用する。このチャンクは関心のあるデータを含むが、前のエンコーディングバッファ６２５は関心のあるデータを含まない可能性があるため、前のエンコーディングバッファ６２５のデータは（表６の第３行に示すように）出力ストリームに出力され、現在のトランスコーディングされたチャンクは（表６の第３行に示すように）前のエンコーディングバッファ６２５に移動する。
【０１１９】
表６の第３行で、ルール評価器６３５によってプロセッシングされた第３のチャンクは「［１、ＢＰ］、０、１」である。このチャンクは関心のあるデータ（値「０」及び「１」）を含まない可能性があるため、値「０」及び値「１」を値「０」（ドントケアのデータであることを示す）と代替するために、ルール評価器６３５は、図８の入力辞書８０５から出力辞書８１０へのマップを使用する。このチャンクは関心のないデータを含むが、前のエンコーディングバッファ６２５は関心のあるデータを含むため、前のエンコーディングバッファ６２５のデータは（表６の第４行に示すように、）出力ストリームで出力され、現在のトランスコーディングされたチャンクは（表６の第４行に示すように）前のエンコーディングバッファ６２５に移動する。
【０１２０】
表６の第４行で、ルール評価器６３５によってプロセッシングされた第４のチャンクは「［５、ＲＬＥ］、１」である。このチャンクは関心のあるデータ（値「１」）を含まないため、値「１」を値「０」（ドントケアのデータであることを示す）に代替するために、ルール評価器６３５は、図８の入力辞書８０５から出力辞書８１０へのマップを使用する。
【０１２１】
このチャンクは「ドントケア」のデータを含み、前のエンコーディングバッファ６２５は「ドントケア」のデータを含むため、この２つのチャンクは結合される。このチャンクはＲＬＥを使用するが、前のエンコーディングバッファ６２５のチャンクはビットパッキングを使用するため、両方のエンコーディング方式のいずれかが他のエンコーディング方式に代替される。この例では、ビットパッキングのエンコーディングデータは、ＲＬＥを使用してトランスコーディングされる。（再び、値のグループではない単一の値が複製されるため、ＲＬＥを選択する）結果として、前のエンコーディングのバッファ６２５は、今「［７、ＲＬＥ］０」（表４の第５行に示されたように）を格納し、これは、３番目のチャンクの２つの「ドントケア」の値と４番目のチャンクの５つの「ドントケア」の値とを結合したものである。
【０１２２】
表６の第５行で、ルール評価器６３５によってプロセッシングされた第２のチャンクは「［１、ＢＰ］、３」である。このチャンクは関心のあるデータ（値「３」）を含まない可能性があるため、値「３」を値「０」（ドントケアのデータであることを示す）に代替するために、ルール評価器６３５は、図８の入力辞書８０５から出力辞書８１０へのマップを使用する。
【０１２３】
このチャンクは「ドントケア」のデータを含み、前のエンコーディングバッファ６２５は「ドントケア」のデータを含むため、この２つのチャンクは結合される。このチャンクはビットパッキングを使用するが、前のエンコーディングバッファ６２５のチャンクはＲＬＥを使用するため、両方のエンコーディング方式のいずれかが他のエンコーディング方式に置き換えられる。この例では、ビットパッキングのエンコーディングデータは、ＲＬＥを使用してトランスコーディングされる。結果として、前のエンコーディングのバッファ６２５は、今「［８、ＲＬＥ］０」を格納し、これは、３番目のチャンクの２つの「ドントケア」の値、４番目のチャンクの５つの「ドントケア」の値、及び５番目のチャンクの１つの「ドントケア」の値を結合したものである。
【０１２４】
最後に、第５のチャンクは、入力ストリームの最後のチャンクであるため、ルール評価器６３５は、前のエンコーディングバッファ６２５にトランスコーディングされたデータを出力する。表６の第６行は、最終的な出力を示す。
【０１２５】
上記の例の中のいずれも連続的なチャンクが関心のあるデータを含む状態を示してはいない。本発明の実施形態は、このような状況を異なる方法でプロセッシングすることができる。本発明の一実施形態で、現在のエンコーディングバッファ６２０が関心のあるデータを含む場合、前のエンコーディングバッファ６２５の任意のチャンクが出力ストリームに出力される（即ち、現在のエンコーディングバッファ６２０が関心のあるデータを含む場合には、現在のエンコーディングバッファ６２０のデータを前のエンコーディングバッファ６２５のデータに結合しようとする試みは発生しない）。本発明の他の実施形態では、現在のエンコーディングバッファ６２０のチャンク及び前のエンコーディングバッファ６２５のチャンクが結合される。しかし、本発明のこのような実施形態で、このような組み合わせが実現可能なのか否かは、関心の値が同一なのか否かによって異なる場合がある。例えば、１つのチャンクが中国の市民に関するデータを格納し、他のチャンクが韓国の国民に対するデータを含む場合、このようなチャンクは、本発明の実施形態に基づいて結合されるか又は結合されないことがある。一方、２つのチャンクに韓国の国民に関するデータが含まれる場合、両方のチャンクを結合することが可能である。
【０１２６】
ルール評価器６３５は、トランスコーディングルール６３０を使用して、関心のあるデータ及び関心のないデータ、前のエンコーディングバッファ６２５に格納されるデータｖｓ出力可能なデータ、及びチャンクが１つのエンコーディング方式から他のエンコーディング方式にトランスコーディングされるか否かを決定する。
【０１２７】
上述したように、ルール評価器６３５は、またインデックスマッパー６１５を含む。ルール評価器６３５がインデックスマッパー６１５を含む本発明の実施形態で、ルール評価器６３５は、トランスコーディングルール６３０が適用される前に、現在のエンコーディングバッファ６２０の内容にインデックスマッパー６１５を適用する。
【０１２８】
表７は、使用されたエンコーディング方式がＲＬＥ又はビットパッキングの場合に使用されるいくつかのルールを示す。他のエンコーディング方式が使用される本発明の実施形態で、ルールはそれに応じて変更される。即ち、全てのこのような変形は本発明の実施形態とみなされる。なお、本発明の実施形態は、２つ以上の異なるタイプのエンコーディング方式の間でトランスコーディングデータを管理するルールを含む。例えば、ハイブリッドエンコーディング方式は、３つの異なるエンコーディング方式を使用する。即ち、図６のトランスコーディングルール６３０は、図６の現在のエンコーディングバッファ６２０及び前のエンコーディングバッファ６２５が任意の他のエンコーディング方式のペアを使用してエンコーディングされたデータを含む場合に、データをトランスコーディングする方法を指定することができる。
【０１２９】
表７において、Ｐは図１のホストコンピュータ１０５に関心を有するデータを示し、ＤＣはホストコンピュータ１０５に関心を有していないデータを示す。（データが関心を有すること又は関心を有していないことを識別する方法は、後述する図１１を参照して更に説明する。）変数（例えば、ｘ、ｙ、又はｚ）が使用されている場合、これらの変数は、図１のホストコンピュータ１０５に関心を有するか又は関心を有していない値の数のカウントを示す。例えば、「［ｇ、ＢＰ］Ｐ（ｘ）、ＤＣ（ｙ）、Ｐ（ｚ）」（ルール７及びルール９で使用される）の表現は、ビットパッキングを使用してデータがエンコーディングされたことを示す。即ち、グループのスタート部分に関心があるｘの値、グループの中間部分には関心がないｙの値、及びグループのエンド（ｅｎｄ）に関心があるｚの値をグループが含む。ｘ、ｙ、ｚ、ｇ、及びＧは、「ｇ×Ｇ＝ｘ＋ｙ＋ｚ、１≦ｇ≦６３、ｘ  ｍｏｄ  Ｇ＝０、ｙ  ｍｏｄ  Ｇ＝０、ｚ  ｍｏｄ  Ｇ、ｙ≠０及びパック値当たりビット数で割ったｙ≧１６」のような制約条件を満たさなければならない。最後に、（出力カラムで）ＰＥＢは、ルールがアプリケーションのために選択される場合、前のエンコーディングバッファ６２５に格納された全てのものが出力ストリームに出力されることを表す。表７は、任意のデータがインデックスマッパー６１５によって既にマッピングされた状況を考慮する。従って、図８の出力辞書８１０に対応する値を含む。
【０１３０】
【表７】
2020178347.tif 000009
【０１３１】
上記の説明は、一般的に、データ対してトランスコーディングがどのように遂行されるかを説明する。しかし、データがカラムフォーマットで格納される場合、カラムフォーマットは、トランスコーディングを有用に活用する。この活用を説明する前に、カラムフォーマットを理解することが有用である。説明の目的のため、カラムフォーマットを、ＳＳＤを参照して説明するが、本発明の実施形態は、カラムフォーマットを利用する他のストレージ装置を含み得る。
【０１３２】
図９は、カラムフォーマットで格納されたファイルの一例を示す図である。図９にはファイルを示す。ファイルは、ファイルのメタデータ９０５及びカラムチャンク（９１０−１、９１０−２、及び９１０−３）を含む。図９は、３つのカラムのチャンク（９１０−１〜９１０−３）を示しているが、本発明の実施形態は、限定なしに任意の数（０以上）のチャンクを含み得る。
【０１３３】
ファイルメタデータ９０５は、ファイルに関連付けられたメタデータを含む。他のメタデータも格納されるが、図９は、ファイルブロックマップ９１５及び辞書ページ９２０を含むファイルのメタデータ９０５を示す。辞書ページ９２０は、上述した表１に示した辞書のようなファイルのデータ内の値をエンコーディングするのに使用される辞書である。辞書ページ９２０は、また例えば１つの辞書は国名を格納し、他の辞書は性（Ｓｕｒｎａｍｅｓ）を格納するというように、ファイル内の他のデータをエンコーディングするために使用可能な多重辞書を格納することができる。
【０１３４】
ファイルブロックマップ９１５は、個々のカラムチャンク（９１０−１、９１０−２、及び９１０−３）を格納するブロックだけでなく、それらの相対的な順序を識別する。ファイルブロックマップ９１５は、また各カラムチャンク（９１０−１、９１０−２、及び９１０−３）内のデータページの順序を指定するか、又はページの順序がカラムチャンク（９１０−１、９１０−２、及び９１０−３）内で指定される。ファイルブロックマップ９１５は、図５のファイルブロックマップ５３０が図１のストレージ装置１２０に格納された全てのファイルを格納するためにいくつかのブロックが使用されるかに対する情報を提供するという点と、ファイルブロックマップ９１５は、図９に示したファイルを格納するためにどのブロックが使用されるかに対する情報を提供するという点とを除いて、図５のファイルブロックマップ５３０と類似である。（勿論、ファイルブロックマップの全てが共に使用される。即ち、図５のファイルブロックマップ５３０は各ファイルに対するファイルメタデータ９０５を格納するブロックを探し出すのに使用され、ファイルのメタデータ９０５のファイルブロックマップ９１５はファイルに対するカラムチャンクを格納するカラムチャンクの貯蔵位置を見つけるために使用される。）
【０１３５】
一般的に、単一のカラムチャンクは多数のブロックにまたがり、単一のブロックは多数のカラムチャンクを格納する。データが格納された位置、及びそのデータが示す内容（例えば、そのデータが含まれるファイル）を識別できるある方法が存在する限り、データ格納に対するより一般的な解決策には殆ど問題がない。しかし、この説明の目的として、カラムチャンクが単一のブロックに適しており、ブロックがカラムチャンクを共有していない状況を考慮することにする。従って、カラムチャンク（９１０−１、９１０−２、及び９１０−３）の各々は、別途のブロックに格納される。
【０１３６】
第１のカラムチャンク９１０−１の内（第２及び第３のカラムチャンク（９１０−２及び９１０−３）も同様である）には、辞書ページ９２５及びデータページ（９３０−１、９３０−２、及び９３０−３）が存在する。図９は、３つのデータページを示すが、本発明の実施形態は、カラムチャンク内の任意の数（０又はそれ以上）のデータページを含む。データページは、ファイルの実際のデータを個々のページに合う単位に分けて格納する。
【０１３７】
辞書ページ９２５は、カラムチャンク９１０−１内のデータに使用される辞書を格納する。辞書ページ９２０のように、辞書にページ９２５は、ファイル内の異なるデータをエンコーディングするために使用される多数の辞書を格納する。
【０１３８】
ここで、なぜ図９で辞書のページ９２０及び辞書のページ９２５の両方を示すか疑問が提起される。その理由は、辞書ページ（９２０及び９２５）が異なるカラムフォーマットの実装として使用されるからである。例えば、１つのカラムストレージフォーマットは、辞書ページ９２０に格納されるファイル全体に対して単一の辞書を使用する。しかし、他のカラムのフォーマットは、各カラムのチャンク（９１０−１、９１０−２、及び９１０−３）で個々の辞書のページ９２５を使用する。辞書ページ９２５を使用する利点は、特定のカラムチャンクが辞書を使用しないか、又は特定の値が特定のカラムのチャンク内のデータに使用されない場合、このような情報が辞書ページ９２５で省略されて辞書ページ９２５のサイズを減らすことができる（又は完全に除去）。しかし、一方で、他のカラムのチャンクの多数の辞書ページ９２５は、データの複製を引き起こすことがある。即ち、同一の辞書項目が多数のカラムチャンクに使用され得る。これが、辞書ページ（９２０及び９２５）が点線で示される理由であり、使用されるカラムストレージフォーマットに基づいていずれか１つが省略されることもある。（実際にはファイルが辞書を全く使用していない可能性もあり、この場合には、辞書のページ（９２０及び９２５）は、全て省略される。）
【０１３９】
今、カラムフォーマットを説明したため、カラムフォーマットを使用するストレージ装置内の図４のトランスコーダ４２０を使用するための適応に対する説明が可能である。
図１０は、カラムフォーマットで格納されたデータに対するトランスコーディングを実装する図１のストレージ装置１２０を示す図である。図１０に示すように、ストレージ装置１２０は、ホストインターフェースレイヤ５０５、ストレージ装置のコントローラ５１０、及びストレージ５１５を含み、これらの機能は、上述した図５を参照して説明したものと同様に機能する（ストレージ装置１２０は、ＳＳＤ、ハードディスクドライブ、又はカラムフォーマットを使用する任意の他のストレージ装置である）。
【０１４０】
ストレージ装置１２０は、またインストレージコンピュータコントローラ１００５、カラムチャンクプロセッサ１０１０、及びインストレージコンピュータ３１５を含む。インストレージコンピュータコントローラ１００５は、インストレージコンピュータ３１５及びカラムチャンクプロセッサ１０１０に伝送される情報を管理する。例えば、図１のホストコンピュータ１０５はストレージ装置１２０が特定の国の市民の数をカウントするようないくつかのアクセラレーション機能を遂行することを要請し、インストレージコンピュータコントローラ１００５は属性（関心国識別）をカラムチャンクプロセッサ１０１０に提供する。インストレージコンピュータコントローラ１００５は、またストレージ５１５からのデータ、特にカラムチャンクにアクセスしてそのデータをカラムチャンクプロセッサ１０１０に提供する。インストレージコンピュータコントローラ１００５は、またデータに使用されるエンコーディング方式を決定し（ハイブリッドエンコーディング方式ではなく、カラムチャンクやファイル全体を使用するために、単一のエンコーディング方式が使用されると仮定する）、カラムチャンクプロセッサ１０１０にエンコーディングタイプを提供する。最後に、インンストレージコンピュータコントローラ１００５は、再びカラムチャンクプロセッサ１０１０からトランスコーディングされたデータを受信し、図１のホストコンピュータ１０５からの要請に対して適切にそのトランスコーディングされたデータを（図１のホストインターフェースレイヤを介して）図１のホストコンピュータ１０５やインストレージコンピュータ３１５に返還する。カラムチャンクプロセッサ１０１０の構造や動作は下の図１１を参照して説明する。
【０１４１】
インストレージコンピュータコントローラ１００５及びカラムチャンクプロセッサ１０１０は、他の可能性の中でも、適切にプログラムされた汎用プロセッサ、ＦＰＧＡ、ＡＳＩＣ、ＧＰＵ、又はＧＰＧＰＵを使用して実装される。インストレージコンピュータコントローラ１００５及びカラムチャンクプロセッサ１０１０は、同一のハードウェア又は他のハードウェアを使用して実装され（例えば、インストレージコンピュータコントローラ１００５はＡＳＩで実装される一方、カラムチャンクプロセッサ１０１０はＦＰＧＡで実装される）、それらは、単一のユニット又は個々の構成要素として実装される。
【０１４２】
図１１は、カラムフォーマットで格納されたデータに対するトランスコーディンを実施する図１０のカラムチャンクプロセッサ１０１０を示す図である。図１１を参照すると、カラムチャンクプロセッサ１０１０は、入力ストリーム、エンコーディングタイプ、及び属性を入力として受信し、出力ストリームを出力として生成する。入力ストリームは、入力バッファ１１０５に格納される。入力ストリームは、カラムチャンクからの単一のデータページであるか、或いはカラムチャンク内の全てのデータである。入力バッファ１１０５からのデータは、（図６を参照して上述したように、）入力ストリームとしてトランスコーダ４２０に提供される。即ち、トランスコーダ４２０は、また図１０で説明したように、図１０のインストレージコンピュータコントローラ１００５からエンコーディングタイプを受信する。トランスコーダ４２０は、図６のサーキュラーバッファ６０５を含むため、入力バッファ１１０５は、省略され得ることに留意しなければならない。即ち、データは、図６のストリームスプリッタ６１０が動作するように図６のサーキュラーバッファ６０５に格納される。しかし、本発明のいくつかの実施形態では、図６のサーキュラーバッファ６０５は、全体のデータページ又はカラムチャンクを格納するのに十分に大きくない可能性がある（又はデータが、図６のサーキュラーバッファ６０５から除去されるよりも速く入力ストリームがデータを提供する）。この場合、入力バッファ１１０５は、図６のサーキュラーバッファ６０５に直ぐに適合しなくなるデータのための一時的な記憶ストレージ空間として動作する。
【０１４３】
トランスコーダ４２０の出力（図６を参照して説明した出力ストリーム）は、出力バッファ１１１０に格納される。再び、トランスコーダ４２０によって生成される間、データが目的地に直接伝送されるが、完全なデータページ又はカラムチャンクのような特定の単位でデータを伝送することが有用である。このような状況で、出力バッファ１１１０は、適切なデータ単位が生成されるまで出力ストリームを格納する。その時点で、カラムチャンクプロセッサ１０１０は、要請されたトランスコーディングに適するように出力ストリームを、図１０のインストレージコンピュータコントローラ１００５に伝送したり、図１のホストコンピュータ１０５に伝送したりする。
【０１４４】
インデックスマッパー６１５（図１１でトランスコーダ４２０の外部に示しているが、インデックスマッパー６１５は、図６に示すようにトランスコーダ４２０の一部であり得る）は、属性評価器１１１５及びドントケア評価器１１２０から情報を受信する。属性評価器１１１５は、図１０のインストレージコンピュータコントローラ１００５から属性を受信し、関心のあるデータを決定するために属性を使用する。比較演算子は、図８の入力辞書８０５（図９の辞書ページ（９２０、９２５）のいずれか１つである）でどのような値が図１のホストコンピュータ１０５に関心を有しているかを識別するために、属性評価器１１１５によって使用される。ドントケア評価器は、関心のないデータを識別するため、類似するように（しかし、ミラー（ｍｉｒｒｏｒ）の形態で）動作する。属性評価器１１１５及びドントケア評価器１１２０は、相補的に動作するため、両方の評価器のうちのいずれか１つを使用することが可能であるとの点に留意しなければならない（１つの評価器に対する基準を満たしていないデータは、結果的に、他の評価器の基準に適合する）。従って、属性評価器１１１５及びドントケア評価器１１２０のいずれかは、省略され得る。この情報は、属性評価器１１１５及びドントケア評価器１１２０によってインデックスマッパー６１５に提供され、インデックスマッパー６１５は、図８の入力辞書８０５から図８の出力辞書８１０へのマッピングを確立する。
【０１４５】
一例として、米国の市民を含むデータセットの項目数をカウントするための図６のホストコンピュータ１０５からのクエリ（ｑｕｅｒｙ）を再検討する。このクエリが到着すると、属性が抽出される（例えば：「国籍＝米国」、属性の正確なフォーマットは、データセットのフォーマット及びクエリの提出に使用されるアプリケーションに応じて異なる）。図８の入力辞書８０５の検査（表１に示すような）は、「米国」を「３」の値に置き換えるのに使用される。従って、インデックスマッパー６１５に提供された属性は「国籍＝３」を指定し、その次にインデックスマッパー６１５は、図８の出力辞書８１０（表２に示すような）と、表３に示したマップを生成する。
【０１４６】
属性評価器１１１５の結果は、また図６のトランスコーディングルール６３０の構成に使用するため、トランスコーダ４２０に提供されることに留意しなければならない。図６のトランスコーディングルール６３０は図１のホストコンピュータ１０５が関心のあるデータを知ることに依存するため、図６のトランスコーディングルール６３０は、属性評価器１１１５の結果を使用するように適応される。例えば、表７に示したルールを再び考慮すると、属性評価器１１１５の結果（又は図８の入力辞書８０５から出力辞書８１０へのマップ（表３に説明した））は、多様なルールでＰとＤＣに対する適切な値を設定するのに使用される。
【０１４７】
また、図１１において、属性（ｐｒｅｄｉｃａｔｅ）は、入力ストリームとしてトランスコーダ４２０に入力される全てのデータに適用されることに留意しなければならない。属性は図１のホストコンピュータ１０５がクエリを提出するデータセット全体に適用されるものとして結論を出すことが合理的であるが、トランスコーダ４２０は、入力ストリームがデータセットの一部を示すとしても、入力ストリームを完全なものとみなす。例えば、カラムチャンクプロセッサ１０１０は、トランスコーダ４２０を使用するそれ自身の「入力ストリーム」として図９の各データページ（９３０−１、９３０−２、及び９３０−３）をプロセッシングする。トランスコーダ４２０は、入力ストリームが示すことを知らないため、このプロセスは、問題なく動作する。
【０１４８】
図１２Ａ〜図１２Ｃは、本発明の一実施形態によるデータをトランスコーディングする図４及び図６のトランスコーダ４２０の手順の一例のフローチャートである。図１２Ａのブロック１２０５で、図６のトランスコーダ４２０は、入力ストリームから未だ受信されるデータがあるか否かをチェックする。一般的に、この入力ストリームは任意のソースから出力されるが、図９〜図１１で先立って説明したように、この入力ストリームはデータがカラムフォーマットで格納されるときのカラムチャンクからのデータページである。入力ストリームから受信する残りのデータがもはや存在しない場合、ブロック１２１０で、図６のトランスコーダ４２０は、図６の前のエンコーディングバッファ６２５又は図６の現在のエンコーディングバッファ６２０のいずれかに残っているトランスコーディングされたデータがあるか否かをチェックする。図６の前のエンコーディングバッファ６２５又は図６の現在のエンコーディングバッファ６２０のいずれかにトランスコーディングされたデータが残っている場合、図６の前のエンコーディングバッファ６２５からトランスコーディングされたデータが出力ストリームに出力され、続いて、図６の現在のエンコーディングバッファ６２５からトランスコーディングされたデータが出力される。殆どの状況では、ルール評価器６３５が図６の現在のエンコーディングバッファ６２０のデータに対して動作するため、図６の現在のエンコーディングバッファ６２０には何も存在してはならない。図６のトランスコーディングルール６３０を適用した結果として（例えば、表７のルール６〜９に示すように）、図６の現在のエンコーディングバッファ６２０にデータが残る状況でも、図６のルール評価器６３５は、図６のトランスコーダ４２０が入力ストリームから新たなデータを見つける前（図６のサーキュラーバッファ６０５及び図６のストリームスプリッタ６１０を介して）に、そのデータに対して動作する。即ち、図６のトランスコーダ４２０は、入力ストリームで次のデータチャンクをプロセッシングしようと試みる前に、図６の現在のエンコーディングバッファ６２０がクリアされるときを待機する。しかし、トランスコーディングされたデータが、図６の現在のエンコーディングバッファ６２０に残っている場合は、トランスコーディングされたデータは、出力ストリームに出力される。ブロック１２１５で、全てのデータが出力ストリームに出力されると、プロセッシングは終了する（図６のトランスコーダ４２０が新たな入力ストリームをプロセッシングすると予想されるまで）。
【０１４９】
入力ストリームからプロセッシングするデータがまだあると仮定すると、ブロック１２２０で、図６のサーキュラーバッファ６０５が入力ストリームから次のエンコーディングデータを受信し、その後、図６のストリームスプリッタ６１０は、エンコーディングデータで第１のチャンクを識別し、そのチャンクを図６のインデックスマッパー６１５に伝達する。（図６のインデックスマッパー６１５が図６のルール評価器６３５の効果的な一部として提供される本発明の実施形態では、図６のストリームスプリッタ６１０は、エンコーディングデータチャンクを図６の現在のエンコーディングバッファ６２０に配置する。ブロック１２２５で、図６のインデックスマッパー６１５（又は図６のルール評価器６３５）は、データチャンクが関心あるか否かを決定する。より具体的には、データチャンクが図１のホストコンピュータ１０５によって要請されたデータを含むか否かに従う（例えば、属性から）。
【０１５０】
エンコーディングデータチャンクが、図１のホストコンピュータ１０５の関心のあるデータを含む場合、図１のブロック１２３０（図１２Ｂ）で、図６のインデックスマッパー６１５（又は図６のルール評価器６３５）は、チャンクに有る任意のデータを再びエンコーディングするために、図８の入力辞書８０５から図８の出力辞書８１０へのマップを使用する。ブロック１２３５で、図６のルール評価器６３５は、図６の前のエンコーディングバッファ６２５でトランスコーディングされたデータが図１のホストコンピュータ１０５に関心を有するか否かをチェックする。そうでない場合（そして現在のチャンクが図１２Ａのブロック１２２５で決定されたように、図１のホストコンピュータ１０５に関心のあることを思い出す場合）、ブロック１２４０で、図６のトランスコーダ４２０は図６の前のエンコーディングバッファ６２５でトランスコーディングされたデータを出力ストリームに出力し、そしてブロック１２４５で、図６のトランスコーダ４２０は現在のトランスコーディングされたチャンクを図６の前のエンコーディングバッファ６２５に格納した後、手順は図１２Ａのブロック１２０５にリターンする。
【０１５１】
一方、ブロック１２３５で決定されたように、図６の前のエンコーディングバッファ６２５がまた図１のホストコンピュータ１０５に関心のあるデータを格納した場合、ブロック１２５０で、図６のルール評価器６３５は、現在のチャンク及び図６の前のエンコーディングバッファ６２５のトランスコーディングされたチャンクが同一のエンコーディング方式を使用するか否かを決定する。そうでない場合、ブロック１２５５で、図６のルール評価器６３５は、チャンクのうちのいずれか（図６の現在のエンコーディングバッファ６２０のチャンク又は図６の前のエンコーディングバッファ６２５のチャンク）により使用されているエンコーディング方式を変更する。（２つ以上のエンコーディング方式が使用される状況で、図６のルール評価器６３５は、図６の現在のエンコーディングバッファ６２０及び図６の前のエンコーディングバッファ６２５の両方のチャンクに使用されるエンコーディング方式を変更する。）次に、図６の現在のエンコーディングバッファ６２０及び図６の前のエンコーディングバッファ６２５の両方のチャンクが同一のエンコーディング方式を使用していると知られると、ブロック１２６０で、図６のルール評価器６３５は、２つのチャンクを単一のチャンクに結合する。これは、図６の前のエンコーディングバッファ６２５に格納され、その後の手順は、図１２Ａのブロック１２０５にリターンする。
【０１５２】
図１２Ｂは、現在のチャンクが２回トランスコーディングされることを示す。即ち、ブロック１２３０で１回（値が図８の出力辞書８１０に対応するようにアップデートされるとき）、及びブロック１２５５で１回（現在のチャンクのエンコーディング方式が変更される場合に、エンコーディング方式から別のエンコーディング方式に変更されるとき）である。この２つの作業を個別に遂行するが、２つの作業を結合することもできる。即ち、同時にエンコーディング方式を変更して、値をアップデートすることもできる。本発明の実施形態は、これらの動作を個別に、そして単一の段階として遂行することを含む。
【０１５３】
また、現在のチャンクが図１のホストコンピュータ１０５に関心のある場合に遂行される動作を説明する図１２Ｂを思い出すと（図１２Ａのブロック１２２５で決定されたように）、現在のチャンクが図１のホストコンピュータ１０５の関心がない場合（図１２Ａのブロック１２２５で決定されたように）、ブロック１２６５（図１２Ｃの）で、図６のインデックスマッパー６１５（又は図６のルール評価器６３５）は、チャンクの全てのデータを再びエンコーディング（特に、ドントケアの値に）するために、図８の入力辞書８０５から図８の出力辞書８１０へのマップを使用する。ブロック１２７０で、図６のルール評価器６３５は、図６の前のエンコーディングバッファ６２５でトランスコーディングされたデータが図１のホストコンピュータ１０５に関心があるかをチェックする。そうである場合（図１２Ａのブロック１２２５で決定されたように、現在のチャンクが図１のホストコンピュータ１０５に関心がないことを思い出す場合）、ブロック１２７５で、図６のトランスコーダ４２０は図６の前のエンコーディングバッファ６２５でトランスコーディングされたデータを出力ストリームに出力し、ブロック１２８０で、図６のトランスコーダ４２０は、図６の前のエンコーディングバッファ６２５に現在のトランスコーディングされたチャンクを格納し、その後の手順は、図１２Ａのブロック１２０５にリターンする。
【０１５４】
一方、ブロック１２７０で決定されたように、図６の前のエンコーディングバッファ６２５がまた図１のホストコンピュータ１０５に関心のないデータを格納する場合、ブロック１２８５で、図６のルール評価器６３５は、現在のチャンクと図６の前のエンコーディングバッファ６２５のトランスコーディングされたチャンクとが同一のエンコーディング方式を使用するか否かを決定する。同一のエンコーディング方式ではない場合、ブロック１２９０で、図６のルール評価器６３５は、チャンクのうちのいずれか（図６の現在のエンコーディングバッファ６２０のチャンク又は図６の前のエンコーディングバッファ６２５のチャンクのいずれか１つ）によって使用されるエンコーディング方式を変更する。（２つ以上のエンコーディング方式が使用される状況で、図６のルール評価器６３５は、図６の現在のエンコーディングバッファ６２０及び図６の前のエンコーディングバッファ６２５の両方のチャンクに使用されるエンコーディング方式を変更する）。次に、図６の現在のエンコーディングバッファ６２０及び図６の前のエンコーディングバッファ６２５の両方のチャンクが同一のエンコーディング方式を使用すると知られると、ブロック１２９５で、図６のルール評価器６３５は２つのチャンクを単一のチャンクに結合し、これは図６の前のエンコーディングバッファ６２５に格納され、その後の手順は、図１２Ａのブロック１２０５にリターンする。
【０１５５】
図１２Ｃは、現在のチャンクが２回トランスコーディングされることを示す。即ち、ブロック１２６５で１回（値が図８の出力辞書８１０に対応するようにアップデートされるとき）及びブロック１２９０で１回（現在のチャンクのエンコーディング方式が変更される場合に、エンコーディング方式から別のエンコーディング方式に変更されるとき）この２つの作業を個別に遂行するが、２つの作業を結合することもできる。即ち、同時にエンコーディング方式を変更して値をアップデートすることもできる。本発明の実施形態は、これらの動作を個別にそして単一の段階として遂行することを含む。
【０１５６】
図１２Ａ〜１２Ｃの全体に亘って、図６の前のエンコーディングバッファ６２５にいくつかのデータが存在するという暗黙の仮定が存在する。例えば、ブロック（１２３５及び１２７０）は、図６の前のエンコーディングバッファ６２５にいくつかのデータがある状況を説明する。結合されるデータチャンクの結合をサポートするために、トランスコーディングされたデータが図６の前のエンコーディングバッファ６２５にバッファリングされるため、これは一般的に合理的な仮定である（データが既に出力ストリームに出力された場合に、チャンクの結合を試みるのには遅すぎる）。しかし、図６の前のエンコーディングバッファ６２５に格納されたデータがない状況が有り得る。一例として、入力ストリームの１番目のチャンクがプロセッシングされるとき、前のエンコーディングのバッファ６２５には、データが全く存在しない（その入力ストリームよりも前にプロセッシングされたことがないため）。
【０１５７】
第２の例として、データチャンクの結合をサポートしないエンコーディング方式が有るが、この場合、図６の前のエンコーディングバッファ６２５に前のチャンクを格納するのに全く値がない。図６の前のエンコーディングバッファ６２５にデータがない場合に、図６の前のエンコーディングバッファ６２５で、現在のチャンクと（存在しない）チャンクとの比較、又は図６の前のエンコーディングバッファ６２５から（存在しない）チャンクを出力することはなんの意味もない。簡単な解決策は、図６の前のエンコーディングバッファ６２５にデータがない場合、従って前のエンコーディングバッファ６２５でのデータの存在に依存する何ものも遂行されない。従って、例えば図１２Ｂにおいて、前のエンコーディングバッファ６２５にデータがない場合、プロセッシングは、ブロック１２３０からブロック１２４５に直接ジャンプし（図６の前のエンコーディングバッファ６２５で現在のトランスコーディングされたチャンクをバッファリングするために）、図１２Ｃで、プロセッシングは、ブロック１２６５からブロック１２８０に直接ジャンプする（図６の前のエンコーディングバッファ６２５で現在のトランスコーディングされたチャンクをバッファリングするために）。
【０１５８】
図１２Ｂ及び図１２Ｃの綿密な検討を介して両者の間の差が比較的少ないことが分かる。注目すべき若干の違いは、ブロック（１２３０及び１２６５）、及びブロック（１２３５及び１２７０）から離れる異なるブランチにある。実際に、これらの違いさえも比較的意味は小さい。即ち、ブロック（１２３０及び１２６５）は、全て図８の出力辞書８１０に基づく再エンコーディングに関する（ブロック１２６５は、「ドントケア」の値の使用を具体的に命名する）。そして、ブロック（１２３５及び１２７０）から離れるブランチが違うようにラベルを付けられているが、その理由は、ブロック（１２３５及び１２７０）は、現在のチャンクが前のチャンクに結合されるか否かを決定することに関するからである。これにより、図１２Ｂ及び図１２Ｃは、動作シーケンスに関連して若干の明確性の損失を甘受しながら理論的に結合される。
【０１５９】
図１３は、入力エンコーディングデータをチャンクに分割する図６のストリームスプリッタ６１０の手順の一例のフローチャートである。図１３を参照すると、ブロック１３０５で、図６のストリームスプリッタ６１０は、（図１のストレージ装置１２０内の図３のストレージ３０５に起因する）入力エンコーディングデータを受信し、これは、図１１の入力バッファ１１０５や図６のサーキュラーバッファ６０５のようなバッファにバッファリングされる。ブロック１３１０で、図６のストリームスプリッタ６１０は、入力エンコーディングデータをチャンクに分ける。ブロック１３１５で、図６のストリームスプリッタ６１０は、チャンクを図６のトランスコーダ４２０に伝送する（又は、図６のインデックスマッパー６１５又は図６の現在のエンコーディングバッファ６２０に）。
【０１６０】
図１４Ａ〜図１４Ｂは、本発明の一実施形態によるカラムフォーマットで格納されたデータをトランスコーディングする図１０のカラムチャンクプロセッサ１０１０及び／又は図４及び図６のトランスコーダ４２０の手順の一例のフローチャートである。図１４Ａ〜図１４Ｂは、また少なくとも１つの実施形態で、図６のストリームスプリッタ６１０がどのように図１３のブロック１３０５で説明したように入力エンコーディングデータを受信するかに対する拡張された例を示す。
【０１６１】
図１４Ａのブロック１４０５で、図１０のカラムチャンクプロセッサ１０１０は、ファイルのために図９のファイルブロックマップ９１５（又は代案的に又は累積的に、図５のファイルブロックマップ５３０）にアクセスする。ブロック１４１０で、図１０のカラムチャンクプロセッサ１０１０は、図９のファイルメタデータ９０５とその後に図９の辞書ページ９２０とを見つけるために、図９のファイルブロックマップ９１５を使用する。図９の各々のカラムチャンク（９１０−１、９１０−２、及び９１０−３）が図９の独自の辞書ページ９２５を含む場合、図９の辞書ページ９２５は、図９のファイルメタデータ９０５から省略され、この場合、ブロック１４１０は、点線１４１５で示したように省略される。その次に、図９のファイルブロックマップ９１５を使用して、ブロック１４２０で、図１０のカラムチャンクプロセッサ１０１０は、ファイルのカラムチャンクを識別する（これは、図１のストレージ装置１２０に格納されたデータのブロックである）。
【０１６２】
ブロック１４２５（図１４Ｂ）で、図１０のカラムチャンクプロセッサ１０１０は、アクセスするより多くのカラムチャンク（ブロック）があるか否かを判定する。そうでない場合（カラムチャンクがもはや存在しない場合）、プロセッサは終了する。一方（カラムチャンクが存在する場合）、ブロック１４３０で、図１０のカラムチャンクプロセッサ１０１０は、図９のカラムチャンク（９１０−１、９１０−２、又は９１０−３）から図９の辞書ページ９２５にアクセスする。図９のファイルメタデータ９０５が図９の辞書ページ９２０を格納する場合、図９のカラムチャンク（９１０−１、９１０−２、及び９１０−３）は、図９の辞書ページ９２５を省略することができるが、これは点線１４３５で示したようにブロック１４３０が省略される。ブロック１４４０で、図１０のカラムチャンクプロセッサ１０１０は、図９のカラムチャンク（９１０−１、９１０−、２及び９１０−３）から図９のデータページ（９３０−１、９３０−２、及び９３０−３）にアクセスする。ブロック１４４５で、図１０のカラムチャンクプロセッサ１０１０は、図８の入力辞書８０５とカラムチャンクのための図９のデータページ（９３０−１、９３０−２、及び９３０−３）とを、図６のトランスコーダ４２０、図６のストリームスプリッタ６１０、又は図６のインデックスマッパー６１５に（順番に）伝達する。
【０１６３】
図１５は、本発明の一実施形態による図８の入力辞書８０５を出力辞書８１０にマッピングする図６のインデックスマッパー６１５の手順の一例のフローチャートである。図１５を参照すると、ブロック１５０５で、図６のインデックスマッパー６１５は、図８の入力辞書８０５を受信する（例えば、図１０のカラムチャンクプロセッサ１０１０から）。ブロック１５１０で、図６のインデックスマッパー６１５は、図８の入力辞書８０５でどのようなデータが関心対象であるかを決定する。図６のインデックスマッパー６１５は、例えばおそらく図１０のインストレージコンピュータコントローラ１００５を経由して図１のホストコンピュータ１０５から提供される属性を使用して、このような決定をする。ブロック１５１５で、図６のインデックスマッパー６１５は、図８の出力辞書８１０を生成する。出力辞書８１０は、図１のホストコンピュータ１０５の全ての関心のある項目を含むが、図１のホストコンピュータ１０５に関心のない全ての項目を１つの「ドントケア」の値に統合する。ブロック１５２０で、図６のインデックスマッパー６１５は、図８の入力辞書８０５から図８の出力辞書８１０への値をマッピングする。最後に、ブロック１５２５で、図８のインデックスマッパー６１５は、図８の出力辞書８１０を出力する。
【０１６４】
図１６Ａ〜図１６Ｂは、図１のホストコンピュータ１０５から受信された属性を管理してトランスコーディングされたデータに対するアクセラレーション機能を潜在的に遂行する図１０のインストレージ（ｉｎ−ｓｔｏｒａｇｅ）コンピュータコントローラ１００５の手順の一例のフローチャートである。図１６Ａのブロック１６０５で、図１０のインストレージコンピュータコントローラ１００５は、図１のホストコンピュータ１０５から属性を受信する。ブロック１６１０で、図１０のインストレージコンピュータコントローラ１００５は、クエリにカバーされるエンコーディングデータを得るために図８の入力辞書８０５にアクセスする。ブロック１６１５で、図１０のインストレージコンピュータコントローラ１００５は、属性によってカバーされる図８の入力辞書８０５で項目を識別する（即ち、図１のホストコンピュータ１０５に関心のある図８の入力辞書８０５の項目）。ブロック１６２０で、図１０のインストレージコンピュータコントローラ１００５は、属性によってカバーされる項目を含む図８の出力辞書８１０を生成する。ブロック１６２５で、図１０のインストレージコンピュータコントローラ１００５は、属性によってカバーされる図８の入力辞書８０５の項目を図８の出力辞書８１０の項目にマッピングする。
【０１６５】
ブロック１６３０で、図１０のインストレージコンピュータコントローラ１００５は、図８の入力辞書８０５で属性によってカバーされない項目を識別する（即ち、図１のホストコンピュータ１０５に関心のない図８の入力辞書８０５の項目）。ブロック１６３５で、図１０のインストレージコンピュータコントローラ１００５は、図８の出力辞書８１０に「ドントケア」の項目を追加する。ブロック１６４０（図１６Ｂ）で、図１０のインストレージコンピュータコントローラ１００５は、属性によってカバーされない入力辞書８０５の項目を図８の出力辞書８１０の「ドントケア」の項目にマッピングする。
【０１６６】
ブロック１６４５で、図６のルール評価器６３５（図６のトランスコーダ４２０内の）は、図１のホストコンピュータ１０５からのクエリに応じて、図６のトランスコーディングルール６３０を適応させるために属性を使用する。ブロック１６５０で、図６のインデックスマッパー６１５及び図６のルール評価器６３５（潜在的に、図６のトランスコーダ４２０内に全て位置する）は、入力ストリームから出力ストリームにエンコーディングデータをトランスコーディングするために、図８の入力辞書８０５から図８の出力辞書８１０へのマップ及び図６のトランスコーディングルール６３０を使用する（図１２Ａ〜１２Ｃを参照して上述したように）
【０１６７】
この時点で、多様なオプションが存在する。ブロック１６５５に示すように、図１０のインストレージコンピュータコントローラ１００５は、図６のトランスコーダ４２０から出力ストリームを受信し、トランスコーディングされたデータを図１のホストコンピュータ１０５に伝達し、ブロック１６６０で、図１０のインストレージコンピュータコントローラ１００５は、図８の出力辞書８１０を図１のホストコンピュータ１０５に伝送する。或いは、ブロック１６６５で、図１０のインストレージコンピュータコントローラ１００５は、出力ストリームのデータに対するアクセラレーション機能を適用し、ブロック１６７０で、図１０のインストレージコンピュータコントローラ１００５は、アクセラレーション機能の結果を図１のホストコンピュータ１０５に伝送する。
【０１６８】
図１２Ａ〜１６Ｂを参照すると、本発明のいくつかの実施形態が示される。しかし、当業者は、ブロックの順序を変更したり、ブロックを省略したり、図示していないリンクを含んだりすることにより、本発明の他の実施形態も可能であることを認識することができる。フローチャートに対するこのような全ての変形は、明示的に説明するかしないかに拘らず、本発明の実施形態とみなされる。
【０１６９】
本発明の実施形態は、従来技術に比べて技術的な利点を提供する。従来のシステムにおいて、デコーディングされたデータは、図１のホストコンピュータ１０５に伝送される。図１のホストコンピュータ１０５に伝送されたデータが選択的であっても、（即ち、図１のホストコンピュータ１０５に伝送されるデータは、関心のあるデータを含む）、データは相変わらず圧縮又はエンコーディングせずに伝送され、これは空間の節約が選択性を通して達成されることを意味する。対照的に、ストレージの減少の大部分は、圧縮ではなくエンコーディングを使用してなされるため、エンコーディングデータを図１のホストコンピュータ１０５に伝送することは、一般的にデコーディングされたデータを図１のホストコンピュータ１０５に伝送するよりも少ないデータを伝送することを伴う。なお、データは１つのエンコーディング方式から他のエンコーディング方式にトランスコーディングされるため、図６のトランスコーダ４２０を使用することは、別途の動作でデータをデコーディングしてデータを再エンコーディングするよりも、より効率的である。
【０１７０】
次の説明は、本発明の特定の実施態様が実現される適切なマシンに対して簡単で一般的な説明を提供するものである。マシン又はマシン群は、キーボード、マウスなどのような従来の入力装置からの入力だけでなく、他のマシンから受信した指令、仮想現実（ＶＲ）環境との相互作用、生体フィードバック、又は他の入力信号によって少なくとも部分的に制御される。本明細書で使用する用語の「マシン」は、単一のマシン、仮想マシン、又は通信的に結合されたマシン群、仮想マシン群、若しくは共に動作する装置のシステムを広範に含むものと意図される。例としてのマシンは、パーソナルコンピュータ、ワークステーション、サーバ、ポータブルコンピュータ、ハンドヘルド装置、電話、タブレットなどのコンピューティング装置だけでなく、個人又は公共交通機関（例えば、自動車、電車、タクシーなど）のような輸送装置を含む。
【０１７１】
マシン又はマシン群は、プログラム可能な又はプログラム不可能な論理装置又はアレイ、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、エンベデッドコンピュータ、スマートカードのようなエンベデッドコントローラを含む。マシン又はマシン群は、ネットワークインターフェース、モデム、又は他の通信結合を介するように１つ以上の多くのリモートマシン群に対して１つ以上の多くの連結を活用することができる。マシン群は、イントラネット、インターネット、ＬＡＮ（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋｓ）、ＷＡＮ（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋｓ）などのような物理及び／又は論理ネットワークの手段として互いに連結される。この分野における熟練した者は、ネットワーク通信が多様な有線及び／又はワイヤレス近距離又は遠距離キャリア及びワイヤレス周波数（ＲＦ）、衛星、マイクロウェーブ、ＩＥＥＥ８０２．１１、ブルートゥース（登録商標）、光学、赤外線、ケーブル、レーザーなどを含むプロトコルを活用することを理解するだろう。
【０１７２】
本発明の技術的思想の実施形態は、マシンによってアクセスされるときに、マシンが作業を遂行するか、又は抽象データタイプ若しくは低レベルのハードウェアコンテキストを定義することを誘発する関数、プロシージャ、データ構造、アプリケーションなどを含む関連付けられるデータを参照又は協力して説明される。関連付けられたデータは、例えば、ＲＡＭ、ＲＯＭなどの揮発性及び／又は不揮発性メモリ、他のストレージ装置、ハードディスクドライブ、フロッピー（登録商標）ディスク、光学ストレージ、テープ、フラッシュメモリ、メモリスティック（登録商標）、デジタルビデオディスク、生体ストレージなどを含む関連付けられるストレージ媒体に格納される。関連付けられたデータは、物理及び／又は論理ネットワークを含む伝送環境を経てパケット、シリアルデータ、パラレルデータ、伝送信号などの形態で伝達され、圧縮又はエンコーディングされたフォーマットで使用される。関連付けられたデータは、分散環境で使用され、マシンアクセスに対してローカル及び／又はリモートで格納される。
【０１７３】
本発明の技術的思想の実施形態は、１つ以上の多くのプロセッサによって実行可能であり、ここで説明したように、本発明の技術的思想のエレメントを遂行させる命令語を有し、実在する非一時的なマシン読み取り可能な記録媒体を含み得る。
【０１７４】
上述した方法の多様な動作は、多様なハードウェア及び／又はソフトウェア構成要素、回路及び／又はモジュールのような動作を遂行する任意の適切な手段によって行われる。ソフトウェアは、論理機能を実装するための実行可能な命令の順序付けられたリストを含み、単一若しくは複数のような命令を実行するシステム、装置、シングル若しくはマルチコアプロセッサ、又はプロセッサを含むシステムに関連して使用するための任意の「プロセッサ読み取り可能な記録媒体」として実装される。
【０１７５】
本明細書に開示した実施形態に関連して説明した方法又はアルゴリズム、及び機能のブロック又は段階は、ハードウェア、プロセッサによって実行されるソフトウェアモジュール、又はこの両方の組み合わせで直接実施され得る。ソフトウェアで実現される場合、機能は、有形の非一時的コンピュータ読み取り可能な記録媒体上に１つ以上の命令語又はコードとして格納されたり、これを介して伝送されたりする。ソフトウェアモジュールは、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、フラッシュメモリ、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ、又は当業界に公知された任意の他の形態のストレージ媒体に格納される。
【０１７６】
例示した実施形態を参照して本発明の原理を説明して示したが、例示した実施形態は、そのような原理を逸脱することなく配置され且つ詳細に変更され、任意の所望の方法で組み合わされることを認識するはずである。そして、上述した説明が特定の実施形態に焦点を当てたが、他の構成が考慮される。特に、「本発明の実施形態による」などのような表現が本明細書で使用されても、これらのフレーズは、一般的に実施形態の可能性を参照するためのものであり、本発明を特定の実施形態の構成に限定しようとするものではない。本明細書で使用しているように、これらの用語は、他の実施形態に結合可能な同一又は異なる実施形態を指すことができる。
【０１７７】
上述した実施形態は、本発明の概念を限定するものと解釈してはならない。いくつかの実施形態を説明したが、当業者は、本発明の新規な教示及び利点を実質的に逸脱せずに、これらの実施形態に対する多くの修正が可能であることを容易に理解するだろう。従って、そのような全ての修正は、本発明の範囲内に含まれるように意図される。
【０１７８】
本発明の実施形態は、限定なしに次のステートメントへと拡張される。
【０１７９】
［ステートメント１］
本発明の実施形態によるトランスコーダは、入力エンコーディングデータを格納するバッファと、入力辞書から出力辞書にマッピングするインデックスマッパーと、入力エンコーディングデータ、入力辞書、及び入力辞書から出力辞書へのマップに応答して修正された現在のエンコーディングデータを格納する現在のエンコーディングバッファと、前の入力エンコーディングデータ、入力辞書、及び入力辞書から出力辞書へのマップに応答する修正された前のエンコーディングデータを格納する前のエンコーディングバッファと、現在のエンコーディングバッファに格納された修正された現在のエンコーディングデータ、前のエンコーディングバッファに格納された修正された前のエンコーディングデータ、及びトランスコーディングのルールに応答する出力ストリームを生成するルール評価器と、を備える。
【０１８０】
［ステートメント２］
本発明の実施形態は、ステートメント１によるトランスコーダを含み、インデックスマッパーは、トランスコーディングのルールに応答する。
［ステートメント３］
本発明の実施形態は、ステートメント１によるトランスコーダを含み、トランスコーディングのルールは、インデックスマッパーに応答する。
［ステートメント４］
本発明の実施形態は、ステートメント１によるトランスコーダを含み、インデックスマッパーは、入力辞書で選択されたサブセットの項目に応答する。
［ステートメント５］
本発明の実施形態は、ステートメント１によるトランスコーダを含み、ルール評価器は、プロセッサ、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、又は汎用ＧＰＵ（ＧＰＧＰＵ）の中の少なくとも１つを含む。
［ステートメント６］
本発明の実施形態は、ステートメント５によるトランスコーダを含み、ルール評価器は、トランスコーディングのルールを実施するための少なくとも１つのソフトウェア及びトランスコーディングのルールをリストするテーブルを格納するストレージを更に含む。
［ステートメント７］
本発明の実施形態は、ステートメント５によるトランスコーダを含み、ルール評価器は、トランスコーディングのルールを実施するための回路を更に含む。
［ステートメント８］
本発明の実施形態は、ステートメント１によるトランスコーダを含み、ルール評価器は、トランスコーディングのルールを使用して入力エンコーディングデータから修正された現在のエンコーディングデータを生成するように動作する。
［ステートメント９］
本発明の実施形態は、ステートメント８によるトランスコーダを含み、ルール評価器は、修正された前のエンコーディングデータを出力ストリームに追加するように動作する。
［ステートメント１０］
本発明の実施形態は、ステートメント９によるトランスコーダを含み、ルール評価器は、現在のエンコーディングバッファから修正されたエンコーディングされた現在のエンコーディングデータを、前のエンコーディングバッファで修正された前のエンコーディングデータに移動させるように追加で動作する。
［ステートメント１１］
本発明の実施形態は、ステートメント８によるトランスコーダを含み、ルール評価器は、トランスコーディングのルールを使用して、修正された現在のエンコーディングデータを含むように修正された前のエンコーディングデータを修正するように動作する。
［ステートメント１２］
本発明の実施形態は、ステートメント１１によるトランスコーダを含み、ルール評価器は、修正された現在のエンコーディングデータを生成するときに入力エンコーディングデータの第１のエンコーディング方式を第２のエンコーディング方式に変更するように追加で動作する。
［ステートメント１３］
本発明の実施形態は、ステートメント１１によるトランスコーダを含み、ルール評価器は、修正された現在のエンコーディングデータを生成するときに入力エンコーディングデータの第１のエンコーディング方式を第３のエンコーディング方式に変更するように追加で動作する。
［ステートメント１４］
本発明の実施形態は、ステートメント８によるトランスコーダを含み、ルール評価器は、入力エンコーディングデータから入力エンコーディングデータの第１のエンコーディング方式を決定するように動作し、少なくとも２つのエンコーディング方式の中の１つである第１エンコーディング方式は、入力エンコーディングデータで使用される。
［ステートメント１５］
本発明の実施形態は、ステートメント１によるトランスコーダを含み、第１のエンコーディング方式を使用して入力エンコーディングデータで第１のチャンクを識別し、第２のエンコーディングを使用して入力エンコーディングデータで第２のチャンクを識別するストリームスプリッタを更に含む。
［ステートメント１６］
本発明の実施形態は、ステートメント１によるトランスコーダを含み、インデックスマッパーは、入力辞書の少なくとも１つの項目を出力辞書の「ドントケア（ｄｏｎ’ｔ  ｃａｒｅ）」の値にマッピングするように動作する。
［ステートメント１７］
本発明の実施形態は、ステートメント１によるトランスコーダを含み、インデックスマッパーは「ドントケア」の値を出力辞書に追加するように動作する。
［ステートメント１８］
本発明の実施形態は、ステートメント１によるトランスコーダを含み、入力エンコーディングデータは、圧縮された入力エンコーディングデータであり、トランスコーダは、圧縮解除エンジンを更に含む。
［ステートメント１９］
本発明の実施形態は、ステートメント１によるトランスコーダを含み、トランスコーダは、入力エンコーディングデータのデコーディングなしに入力エンコーディングデータから出力ストリームを生成するように動作する。
［ステートメント２０］
本発明の実施形態は、ステートメント１によるトランスコーダを含み、トランスコーダは、ソリッドステートドライブ（ＳＳＤ）のストレージ装置に含まれる。
［ステートメント２１］
本発明の実施形態は、ステートメント２０によるトランスコーダを含み、入力エンコーディングデータは、ＳＳＤストレージ装置内のストレージから受信される。
【０１８１】
［ステートメント２２］
本発明の実施形態による方法は、ストレージ装置内のデータに対するトランスコーダの動作方法であって、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第１のデータチャンクを受信する段階と、第１のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、ホストコンピュータの関心対象である第１のデータチャンクに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階と、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第２のデータチャンクを受信する段階と、第２のデータチャンクがホストコンピュータの関心対象ではないことを決定する段階と、ホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階と、第１のエンコーディングデータ及び第２エンコーディングデータをホストコンピュータに出力する段階と、を有する。
【０１８２】
［ステートメント２３］
本発明の実施形態は、ステートメント２２による方法を含み、ホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階は、第１のエンコーディングデータの値を「ドントケア（ｄｏｎ’ｔ  ｃａｒｅ）」の値に変更する段階を含む。
［ステートメント２４］
本発明の実施形態は、ステートメント２３による方法を含み、ホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階は、第２のエンコーディングデータを「ドントケア」の値を含む第３のエンコーディングデータに結合する段階を更に含む。
［ステートメント２５］
本発明の実施形態は、ステートメント２４による方法を含み、ホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階は、第２のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階を含む。
［ステートメント２６］
本発明の実施形態は、ステートメント２５による方法を含み、第２のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階は、第２のエンコーディングデータの第１のエンコーディング方式を第２のエンコーディングデータの第２のエンコーディング方式に変更する段階を含む。
［ステートメント２７］
本発明の実施形態は、ステートメント２５による方法を含み、第２のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階は、第３のエンコーディングデータの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階を含む。
［ステートメント２８］
本発明の実施形態は、ステートメント２２による方法を含み、ホストコンピュータの関心対象である第１のデータチャンクに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階は、第１のエンコーディングデータを第３のエンコーディングデータに結合する段階を含む。
［ステートメント２９］
本発明の実施形態は、ステートメント２８による方法を含み、ホストコンピュータの関心対象である第１のデータチャンクに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階は、第１のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階を更に含む。
［ステートメント３０］ 
本発明の実施形態は、ステートメント２９による方法を含み、第１のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階は、第１のデータチャンクの第１のエンコーディング方式を第１のエンコーディングデータの第２のエンコーディング方式に変更する段階を含む。
［ステートメント３１］
本発明の実施形態は、ステートメント２９による方法を含み、第１のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階は、第２のエンコーディングデータの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階を含む。
［ステートメント３２］
本発明の実施形態は、ステートメント２２による方法を含み、ホストコンピュータの関心対象である第１のデータチャンクに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階は、トランスコーディングのルールに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階を含み、ホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階は、トランスコーディングのルールに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階を含む。
［ステートメント３３］
本発明の実施形態は、ステートメント２２による方法を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第１のデータチャンクを受信する段階は、ストリームスプリッタで、入力エンコーディングデータを受信する段階と、ストリームスプリッタによって、入力エンコーディングデータで、第１のエンコーディング方式を使用してエンコーディングされた第１のデータチャンク及び第２のエンコーディング方式を使用してエンコーディングされた第２のデータチャンクを識別する段階と、ストリームスプリッタから提供された入力エンコーディングデータから第１のデータチャンクを受信する段階と、を含む。
［ステートメント３４］
本発明の実施形態は、ステートメント２２による方法を含み、この方法は、ストレージ装置から入力辞書を受信する段階と、ホストコンピュータの関心データ及びホストコンピュータの無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階と、出力辞書をホストコンピュータに出力する段階と、を更に含む。
［ステートメント３５］
本発明の実施形態は、ステートメント３４による方法を含み、ホストコンピュータの関心データ及びホストコンピュータの無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階は、トランスコーディングのルールに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階を含む。
［ステートメント３６］
本発明の実施形態は、ステートメント３４による方法を含み、ホストコンピュータの関心データ及びホストコンピュータの無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階は、入力辞書で選択された項目のサブセットに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階を含む。
［ステートメント３７］
本発明の実施形態は、ステートメント２２による方法を含み、トランスコーダは、入力エンコーディングデータのデコーディングなしに入力エンコーディングデータから第１のエンコーディングデータ及び第２のエンコーディングデータを生成するように動作する。
［ステートメント３８］
本発明の実施形態は、ステートメント２２による方法を含み、トランスコーダは、ソリッドステートドライブ（ＳＳＤ）のストレージ装置に含まれる。
［ステートメント３９］
本発明の実施形態は、ステートメント３８による方法を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第１のデータチャンクを受信する段階は、トランスコーダで、ＳＳＤストレージ装置内のストレージから入力エンコーディングデータからの第１のデータチャンクを受信する段階を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第２のデータチャンクを受信する段階は、トランスコーダで、ＳＳＤストレージ装置内のストレージから入力エンコーディングデータからの第２のデータチャンクを受信する段階を含む。
【０１８３】
［ステートメント４０］
本発明の実施形態の物品は、命令語を格納したコンピュータ読み取り可能な非一時的記録媒体を含む物品であって、マシンによって命令語が実行される方法は、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第１のデータチャンクを受信する段階と、第１のデータチャンクがホストコンピュータの関心対象であることを決定する段階と、ホストコンピュータの関心対象である第１のデータチャンクに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階と、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第２のデータチャンクを受信する段階と、第２のデータチャンクがホストコンピュータの関心対象ではないことを決定する段階と、ホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階と、第１エンコーディングデータ及び第２のエンコーディングデータをホストコンピュータに出力する段階と、を有する。
【０１８４】
［ステートメント４１］
本発明の実施形態は、ステートメント４０による物品を含み、ホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２エンコーディングデータを生成する段階は、第１のエンコーディングデータの値を「ドントケア（ｄｏｎ’ｔ  ｃａｒｅ）」の値に変更する段階を含む。
［ステートメント４２］
本発明の実施形態は、ステートメント４１による物品を含み、ホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階は、第２のエンコーディングデータを「ドントケア」の値を含む第３のエンコーディングデータに結合する段階を含む。
［ステートメント４３］
本発明の実施形態は、ステートメント４２による物品を含み、ホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階は、第２のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階を含む。
［ステートメント４４］
本発明の実施形態は、ステートメント４３による物品を含み、第２のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階は、第２のデータチャンクの第１のエンコーディング方式を第２エンコーディングデータの第２のエンコーディング方式に変更する段階を含む。
［ステートメント４５］
本発明の実施形態は、ステートメント４３による物品を含み、第２のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階は、第３のエンコーディングデータの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階を含む。
［ステートメント４６］
本発明の実施形態は、ステートメント４０による物品を含み、ホストコンピュータの関心対象である第１のデータチャンクに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階は、第１のエンコーディングデータを第３のエンコーディングデータに結合する段階を含む。
［ステートメント４７］
本発明の実施形態は、ステートメント４６による物品を含み、ホストコンピュータの関心対象である第１のデータチャンクに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階は、第１のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階を更に含む。
［ステートメント４８］
本発明の実施形態は、ステートメント４７による物品を含み、第１のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階は、第１のデータチャンクの第１のエンコーディング方式を第１のエンコーディングデータの第２のエンコーディング方式に変更する段階を含む。
［ステートメント４９］
本発明の実施形態は、ステートメント４７による物品を含み、第１のデータチャンク及び第３のエンコーディングデータの中の少なくとも１つの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階は、第３のエンコーディングデータの第１のエンコーディング方式を第２のエンコーディング方式に変更する段階を含む。
［ステートメント５０］
本発明の実施形態は、ステートメント４０による物品を含み、ホストコンピュータの関心対象である第１のデータチャンクに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階は、トランスコーディングのルールに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階と、ホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階は、トランスコーディングのルールに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階と、を含む。
［ステートメント５１］
本発明の実施形態は、ステートメント４０による物品を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第１のデータチャンクを受信する段階は、ストリームスプリッタで、入力エンコーディングデータを受信する段階と、ストリームスプリッタによって、入力エンコーディングデータで、第１のエンコーディング方式を使用してエンコーディングされた第１のデータチャンク及び第２のエンコーディング方式を使用してエンコーディングされた第２のデータチャンクを識別する段階と、ストリームスプリッタから提供された入力エンコーディングデータから第１のデータチャンクを受信する段階と、を含む。
［ステートメント５２］
本発明の実施形態は、ステートメント４０による物品を含み、マシンによって命令語が実行される方法は、ストレージ装置から入力辞書を受信する段階と、ホストコンピュータの関心データ及びホストコンピュータの無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階と、出力辞書をホストコンピュータに出力する段階と、を更に含む。
［ステートメント５３］
本発明の実施形態は、ステートメント５２による物品を含み、ホストコンピュータの関心データ及びホストコンピュータの無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階は、トランスコーディングのルールに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階を含む。
［ステートメント５４］
本発明の実施形態は、ステートメント５２による物品を含み、ホストコンピュータの関心データ及びホストコンピュータに無関心データに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階は、入力辞書で選択された項目のサブセットに少なくとも部分的に基づいて、入力辞書を出力辞書にマッピングする段階を含む。
［ステートメント５５］
本発明の実施形態は、ステートメント４０による物品を含み、トランスコーダは、入力エンコーディングデータのデコーディングなしに入力エンコーディングデータから第１のエンコーディングデータ及び第２エンコーディングデータを生成するように動作する。
［ステートメント５６］
本発明の実施形態は、ステートメント４０による物品を含み、トランスコーダは、ソリッドステートドライブ（ＳＳＤ）のストレージ装置に含まれる。
［ステートメント５７］
本発明の実施形態は、ステートメント５６による物品を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第１のデータチャンクを受信する段階は、トランスコーダで、ＳＳＤストレージ装置内のストレージから入力エンコーディングデータからの第１のデータチャンクを受信する段階を含み、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第２のデータチャンクを受信する段階は、トランスコーダで、ＳＳＤストレージ装置内のストレージから入力エンコーディングデータからの第２のデータチャンクを受信する段階を含む。
【０１８５】
［ステートメント５８］
本発明の実施形態のストレージ装置は、入力エンコーディングデータのためのストレージと、ストレージ上のホストコンピュータからの読み取り要請及び書き込み要請をプロセッシングするコントローラと、ストレージに格納された入力エンコーディングデータに適用されるホストコンピュータから発生する属性を受信するインストレージコンピュータ（ＩＳＣ）コントローラと、入力エンコーディングデータに対する入力辞書から出力辞書にマッピングするインデックスマッパーを有するトランスコーダと、を備え、入力辞書は、少なくとも１つの第１の項目及び少なくとも１つの第２の項目を含み、少なくとも１つの第１の項目は、少なくとも１つの第３の項目にマッピングされ、少なくとも１つの第２の項目は、出力辞書の「ドントケア」の項目にマッピングされる。
【０１８６】
［ステートメント５９］
本発明の実施形態は、ステートメント５８によるストレージ装置を含み、トランスコーダは、プロセッサ、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、又は汎用ＧＰＵ（ＧＰＧＰＵ）の中の少なくとも１つを含む。
［ステートメント６０］
本発明の実施形態は、ステートメント５８によるストレージ装置を含み、ＩＳＣコントローラは、トランスコーダからの出力のエンコーディングデータにアクセラレーション機能を適用するように動作する。
［ステートメント６１］
本発明の実施形態は、ステートメント６０によるストレージ装置を含み、ＩＳＣコントローラは、出力のエンコーディングデータに対するアクセラレーション機能の結果をトランスコーダからホストコンピュータに出力するように動作する。
［ステートメント６２］
本発明の実施形態は、ステートメント５８によるストレージ装置を含み、ＩＳＣコントローラは、トランスコーダの出力エンコーディングデータをホストコンピュータに伝送するように動作する。
［ステートメント６３］
本発明の実施形態は、ステートメント６２によるストレージ装置を含み、ＩＳＣコントローラは、出力辞書をホストコンピュータに伝達するように動作する。
［ステートメント６４］
本発明の実施形態は、ステートメント５８によるストレージ装置を含み、トランスコーダは、入力エンコーディングデータ及び入力辞書から出力辞書へのマップに少なくとも部分的に基づいて、出力のエンコーディングデータを生成するように動作する。
［ステートメント６５］
本発明の実施形態は、ステートメント６４によるストレージ装置を含み、トランスコーダは、入力エンコーディングデータを格納するバッファと、インデックスマッパーと、入力エンコーディングデータに応答する修正された現在のエンコーディングデータ、修正された現在のエンコーディングデータ、及び入力辞書から出力辞書へのマップを格納する現在のエンコーディングバッファと、前の入力エンコーディングデータに応答する修正された前のエンコーディングデータ、変更された前のエンコーディングデータ、及び入力辞書から出力辞書へのマップを格納する前のエンコーディングバッファと、現在のエンコーディングバッファの修正された現在のエンコーディングデータ、前のエンコーディングバッファの修正された前のエンコーディングデータ、及びトランスコーディングルールに応答する出力ストリームを生成するルール評価器と、を含む。
［ステートメント６６］
本発明の実施形態は、ステートメント６５によるストレージ装置を含み、トランスコーディングのルールは、属性に少なくとも部分的に基づく。
［ステートメント６７］
本発明の実施形態は、ステートメント６５によるストレージ装置を含み、ルール評価器は、入力エンコーディングデータのデコーディングなしに、現在のエンコーディングバッファの修正された現在のエンコーディングデータ、前のエンコーディングバッファの修正された前のエンコーディングデータ、及びトランスコーディングのルールに応答する出力ストリームを生成する。
［ステートメント６８］
本発明の実施形態は、ステートメント６４によるストレージ装置を含み、入力エンコーディングデータは、第１のエンコーディング方式を使用し、出力エンコーディングデータは、第２のエンコーディング方式を使用し、そして第２のエンコーディング方式は、第１のエンコーディング方式と異なる。
［ステートメント６９］
本発明の実施形態は、ステートメント５８によるストレージ装置を含み、入力エンコーディングデータは、ストレージにカラムフォーマットで格納される。
［ステートメント７０］
本発明の実施形態は、ステートメント６９によるストレージ装置を含み、入力エンコーディングデータは、アパッチパールケェイ（Ａｐａｃｈｅ  Ｐａｒｑｕｅｔ）ストレージフォーマットを使用して格納された入力ファイルを含む。
［ステートメント７１］
本発明の実施形態は、ステートメント６９によるストレージ装置を含み、入力エンコーディングデータを含むカラムチャンクをプロセッシングし、入力エンコーディングデータをトランスコーダに伝達するカラムチャンクプロセッサを更に含む。
［ステートメント７２］
本発明の実施形態は、ステートメント７１によるストレージ装置を含み、カラムチャンクプロセッサは、トランスコーダを含む。
［ステートメント７３］
本発明の実施形態は、ステートメント７１によるストレージ装置を含み、カラムチャンクプロセッサは、プロセッサ、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、及び汎用ＧＰＵ（ＧＰＧＰＵ）の中の少なくとも１つを含む。
［ステートメント７４］
本発明の実施形態は、ステートメント５８によるストレージ装置を含み、トランスコーダは、出力エンコーディングデータを生成するために属性に少なくとも部分的に基づいて、入力エンコーディングデータに適用するトランスコーディングのルールを作成するように動作する。
［ステートメント７５］
本発明の実施形態は、ステートメント７４によるストレージ装置を含み、トランスコーダは、入力エンコーディングデータをデコーディングせずに、出力エンコーディングデータを生成するように動作する。
【０１８７】
［ステートメント７６］
本発明の実施形態の方法は、トランスコーダで、入力エンコーディングデータに適用する属性を受信する段階と、入力エンコーディングデータに対する入力辞書にアクセスする段階と、属性によってカバーされる入力辞書で少なくとも１つの第１項目及び属性によってカバーされない入力辞書で少なくとも１つの第２の項目を識別する段階と、属性によってカバーされない辞書で少なくとも１つの第２の項目を排除する出力辞書を生成する段階であって、トランスコーディング辞書は、少なくとも第３の項目及び「ドントケア」の項目を含む段階と、トランスコーダにより、入力辞書の少なくとも１つの第１項目を出力辞書の少なくとも１つの第３項目にマッピングし、属性によってカバーされない入力辞書の少なくとも１つの第２項目を出力辞書の「ドントケア」の項目にマッピングする段階と、を有する。
【０１８８】
［ステートメント７７］
本発明の実施形態は、ステートメント７６による方法を含み、入力エンコーディングデータは、カラムフォーマットで格納される。
［ステートメント７８］
本発明の実施形態は、ステートメント７７による方法を含み、入力エンコーディングデータは、アパッチパールクェイ（Ａｐａｃｈｅ  Ｐａｒｑｕｅｔ）のストレージフォーマットを使用して格納された入力ファイルを含む。
［ステートメント７９］
本発明の実施形態は、ステートメント７６による方法を含み、入力エンコーディングデータは、カラムフォーマットで格納されたカラムチャンクを含む。
［ステートメント８０］
本発明の実施形態は、ステートメント７６による方法を含み、この方法は、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階と、出力エンコーディングデータを出力する段階と、を含む。
［ステートメント８１］
本発明の実施形態は、ステートメント８０による方法を含み、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階は、トランスコーダで、入力エンコーディングデータから第１のデータチャンクを受信する段階と、第１のデータチャンクが属性によってカバーされることを決定する段階と、辞書マップを使用してホストコンピュータの関心対象である第１のデータチャンクに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階と、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第２のデータチャンクを受信する段階と、第２のデータチャンクが属性によってカバーされないことを決定する段階と、辞書マップを使用してホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２のエンコーディングデータを生成する段階と、第１のエンコーディングデータ及び第２のエンコーディングデータを出力する段階と、を含む。
［ステートメント８２］
本発明の実施形態は、ステートメント８１による方法を含み、トランスコーダで、入力エンコーディングデータから第１のデータチャンクを受信する段階は、カラムチャンクプロセッサで、インストレージコンピュータ（ＩＳＣ）コントローラからブロック識別子（ＩＤ）のリストを受信する段階と、カラムチャンクプロセッサにより、ブロックＩＤのリストからブロックブロック識別子（ＩＤ）を含むカラムチャンクにアクセスする段階と、カラムチャンクプロセッサからカラムチャンクからの入力エンコーディングデータを検索する段階と、カラムチャンクプロセッサからの入力エンコーディングデータをトランスコーダに伝送する段階と、を含む。
［ステートメント８３］
本発明の実施形態は、ステートメント８１による方法を含み、この方法は、属性に少なくとも部分的に基づいて、入力エンコーディングデータに適用するためのトランスコーディングのルールを生成する段階を更に含む。
［ステートメント８４］
本発明の実施形態は、ステートメント８０による方法を含み、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階は、入力エンコーディングデータのデコーディングなしに、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階を含む。
［ステートメント８５］
本発明の実施形態は、ステートメント８０による方法を含み、入力エンコーディングデータは、第１のエンコーディング方式を使用し、出力エンコーディングデータは、第２のエンコーディング方式を使用し、そして第２のエンコーディング方式は、第１のエンコーディング方式と異なる。
［ステートメント８６］
本発明の実施形態は、ステートメント８０による方法を含み、出力エンコーディングデータを出力する段階は、出力エンコーディングデータをＩＳＣコントローラに出力する段階を含む。
［ステートメント８７］
本発明の実施形態は、ステートメント８６による方法を含み、出力エンコーディングデータをＩＳＣコントローラに出力する段階は、出力辞書をＩＳＣコントローラに出力する段階を更に含む。
［ステートメント８８］
本発明の実施形態は、ステートメント８７による方法を含み、この方法は、ＩＳＣコントローラからホストコンピュータに出力エンコーディングデータ及び出力辞書を伝達する段階を更に含む。
［ステートメント８９］
本発明の実施形態は、ステートメント８７による方法を含み、この方法は、アクセラレーションされたデータを生成するために、ＩＳＣコントローラによって出力エンコーディングデータに対してアクセラレーション機能を遂行する段階を更に含む。
［ステートメント９０］
本発明の実施形態は、ステートメント８９による方法を含み、この方法は、ＩＳＣコントローラからホストコンピュータにアクセラレーションされたデータを出力する段階を更に含む。
［ステートメント９１］
本発明の実施形態は、ステートメント７６による方法を含み、この方法は、出力辞書を出力する段階を更に含む。
［ステートメント９２］
本発明の実施形態は、ステートメント７６による方法を含み、入力エンコーディングデータに適用するために属性を受信する段階は、ＩＳＣコントローラから入力エンコーディングデータに適用する属性を受信する段階を含む。
［ステートメント９３］
本発明の実施形態は、ステートメント９２による方法を含み、この方法は、ＩＳＣコントローラから入力辞書を受信する段階を更に含む。
［ステートメント９４］
本発明の実施形態は、ステートメント７６による方法を含み、この方法は、入力辞書で属性によってカバーされない項目がないと決定する段階と、入力エンコーディングデータを出力エンコーディングデータにトランスコーディングせずに入力エンコーディングデータを出力する段階と、を含む。
【０１８９】
［ステートメント９５］
本発明の実施形態の物品は、命令語を格納したコンピュータ読み取り可能な非一時的記録媒体を含む物品であって、マシンによって命令語が実行され方法は、トランスコーダで、入力エンコーディングデータに適用する属性を受信する段階と、入力エンコーディングデータに対する入力辞書にアクセスする段階と、属性によってカバーされる入力辞書で少なくとも１つの第１項目及び属性によってカバーされない入力辞書で少なくとも１つの第２の項目を識別する段階と、属性によってカバーされない入力辞書で少なくとも１つの第２の項目を排除する出力辞書を生成する段階であって、トランスコーディング辞書は、少なくとも第３の項目及び「ドントケア」の項目を含む段階と、トランスコーダにより、入力辞書の少なくとも１つの第１項目を出力辞書の少なくとも１つの第３項目にマッピングし、属性によってカバーされない入力辞書の少なくとも１つの第２項目を出力辞書の「ドントケア」の項目にマッピングする段階と、を有する。
【０１９０】
［ステートメント９６］
本発明の実施形態は、ステートメント９５による物品を含み、入力エンコーディングデータは、カラムフォーマットで格納される。
［ステートメント９７］
本発明の実施形態は、ステートメント９６による物品を含み、入力エンコーディングデータは、アパッチパールクェイ（Ａｐａｃｈｅ  Ｐａｒｑｕｅｔ）ストレージフォーマットを使用して格納された入力ファイルを含む。
［ステートメント９８］
本発明の実施形態は、ステートメント９５による物品を含み、入力エンコーディングデータは、カラムフォーマットで格納されたカラムチャンクを含む。
［ステートメント９９］
本発明の実施形態は、ステートメント９５による物品を含み、マシンによって命令語が実行される方法は、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階と、出力エンコーディングデータを出力する段階と、を含む。
［ステートメント１００］
本発明の実施形態は、ステートメント９９による物品を含み、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階は、トランスコーダで、入力エンコーディングデータから第１のデータチャンクを受信する段階と、第１データチャンクが属性によってカバーされることを決定する段階と、辞書マップを使用してホストコンピュータの関心対象である第１のデータチャンクに少なくとも部分的に基づいて、第１のデータチャンクから第１のエンコーディングデータを生成する段階と、トランスコーダで、ストレージ装置から入力エンコーディングデータからの第２のデータチャンクを受信する段階と、第２のデータチャンクが属性によってカバーされないことを決定する段階と、辞書マップを使用してホストコンピュータの関心対象ではない第２のデータチャンクに少なくとも部分的に基づいて、第２のデータチャンクから第２エンコーディングデータを生成する段階と、第１のエンコーディングデータ及び第２のエンコーディングデータを出力する段階と、を含む。
［ステートメント１０１］
本発明の実施形態は、ステートメント１００による物品を含み、トランスコーダで、入力エンコーディングデータから第１のデータチャンクを受信する段階は、カラムチャンクプロセッサで、インストレージコンピュータ（ＩＳＣ）コントローラからブロック識別子（ＩＤ）のリストを受信する段階と、カラムチャンクプロセッサにより、ブロック識別子（ＩＤ）のリストからブロック識別子（ＩＤ）を含むカラムチャンクにアクセスする段階と、カラムチャンクプロセッサからカラムチャンクからの入力エンコーディングデータを検索する段階と、カラムチャンクプロセッサからの入力エンコーディングデータをトランスコーダに伝送する段階と、を含む。
［ステートメント１０２］
本発明の実施形態は、ステートメント１００による物品を含み、マシンによって命令語が実行される方法は、属性に少なくとも部分的に基づいて、入力エンコーディングデータに適用するためのトランスコーディングのルールを生成する段階を含む。
［ステートメント１０３］
本発明の実施形態は、ステートメント９９による物品を含み、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階は、入力エンコーディングデータのデコーディングなしに、辞書マップを使用して入力エンコーディングデータを出力エンコーディングデータにトランスコーディングする段階を含む。
［ステートメント１０４］
本発明の実施形態は、ステートメント９９による物品を含み、入力エンコーディングデータは、第１のエンコーディング方式を使用し、出力エンコーディングデータは、第２のエンコーディング方式を使用し、そして第２のエンコーディング方式は、第１のエンコーディング方式と異なる。
［ステートメント１０５］
本発明の実施形態は、ステートメント９９による物品を含み、出力エンコーディングデータを出力する段階は、出力エンコーディングデータをＩＳＣコントローラに出力する段階を含む。
［ステートメント１０６］
本発明の実施形態は、ステートメント１０５による物品を含み、出力エンコーディングデータをＩＳＣコントローラに出力する段階は、出力辞書をＩＳＣコントローラに出力する段階を更に含む。
［ステートメント１０７］
本発明の実施形態は、ステートメント１０６による物品を含み、マシンによって命令語が実行される方法は、ＩＳＣコントローラからホストコンピュータに出力エンコーディングデータ及び出力辞書を伝達する段階を含む。
［ステートメント１０８］
本発明の実施形態は、ステートメント１０６による物品を含み、マシンによって命令語が実行される方法は、アクセラレーションされたデータを生成するために、ＩＳＣコントローラによって出力エンコーディングデータに対してアクセラレーション機能を遂行する段階を更に含む。
［ステートメント１０９］
本発明の実施形態は、ステートメント１０８による物品を含み、マシンによって命令語が実行される方法は、ＩＳＣコントローラからホストコンピュータにアクセラレーションされたデータを出力する段階を更に含む。
［ステートメント１１０］
本発明の実施形態は、ステートメント９５による物品を含み、マシンによって命令語が実行される方法は、出力辞書を出力する段階を更に含む。
［ステートメント１１１］
本発明の実施形態は、ステートメント９５による物品を含み、入力エンコーディングデータに適用するために属性を受信する段階は、ＩＳＣコントローラから入力エンコーディングデータに適用する属性を受信する段階を含む。
［ステートメント１１２］
本発明の実施形態は、ステートメント１１１による物品を含み、マシンによって命令語が実行される方法は、ＩＳＣコントローラから入力辞書を受信する段階を更に含む。
［ステートメント１１３］
本発明の実施形態は、ステートメント９５による物品を含み、マシンによって命令語が実行される方法は、入力辞書に属性によってカバーされない項目がないと決定する段階と、入力エンコーディングデータを出力エンコーディングデータにトランスコーディングせずに入力エンコーディングデータを出力する段階と、含む。
【０１９１】
以上、本発明の実施形態について図面を参照しながら詳細に説明したが、本発明は、上述の実施形態に限定されるものではなく、本発明の技術的思想から逸脱しない範囲内で多様に変更実施することが可能である。
【符号の説明】
【０１９２】
１０５    マシン（ホストコンピュータ）
１１０    プロセッサ
１１５    メモリ
１２０    ストレージ装置
１２５    メモリコントローラ
１３０    装置ドライバー
２０５    クロック
２１０    ネットワークコネクタ
２１５    バス
２２０    ユーザーインターフェース
２２５    入出力エンジン
３０５    ストレージ
３１５    インストレージプロセッサ（ｉｎ−ｓｔｏｒａｇｅ  ｐｒｏｃｅｓｓｏｒ）
４０５    圧縮データ
４１０    圧縮解除器
４１５    圧縮解除データ
４２０    トランスコーダ
４２５    トランスコーディングされたデータ
４３０    デコーダ
４３５    フィルタリングされたプレーンデータ（ｐｌａｉｎ  ｄａｔａ）
５０５    ホストインターフェース層（ＨＩＬ）
５１０    ＳＳＤ（ストレージ装置の）コントローラ
５１５    ストレージ
５１５−１〜５１５−８    フラッシュメモリチップ（フラッシュメモリストレージ）
５２０−１〜５２０−４    チャネル
５２５    変換レイヤ（フラッシュ変換レイヤ（ＦＴＬ））
５３０、９１５    ファイルブロックマップ
６０５    サーキュラーバッファ（Ｃｉｒｃｕｌａｒ  ｂｕｆｆｅｒ）
６１０    ストリームスプリッタ
６１５    インデックスマッパー
６２０    現在のエンコーディングバッファ
６２５    前のエンコーディングバッファ
６３０    トランスコーディングルール
６３５    ルール評価器
７０５−１〜７０５−３    第１〜第３のチャンク
８０５    入力辞書
８１０    出力辞書
９０５    ファイルメタデータ
９１０−１〜９１０−３    第１〜第３のカラムチャンク
９２０、９２５    辞書ページ
９３０−１〜９３０−３    データページ１〜ｍ
１００５    インストレージコンピュータコントローラ
１０１０    カラムチャンクプロセッサ
１１０５    入力バッファ
１１１０    出力バッファ
１１１５    属性評価器
１１２０    ドントケア（ｄｏｎ’ｔ  ｃａｒｅ）評価器
【図１】
2020178347.tif 000010
【図２】
2020178347.tif 000011
【図３】
2020178347.tif 000012
【図４】
2020178347.tif 000013
【図５】
2020178347.tif 000014
【図６】
2020178347.tif 000015
【図７】
2020178347.tif 000016
【図８】
2020178347.tif 000017
【図９】
2020178347.tif 000018
【図１０】
2020178347.tif 000019
【図１１】
2020178347.tif 000020
【図１２Ａ】
2020178347.tif 000021
【図１２Ｂ】
2020178347.tif 000022
【図１２Ｃ】
2020178347.tif 000023
【図１３】
2020178347.tif 000024
【図１４Ａ】
2020178347.tif 000025
【図１４Ｂ】
2020178347.tif 000026
【図１５】
2020178347.tif 000027
【図１６Ａ】
2020178347.tif 000028
【図１６Ｂ】
2020178347.tif 000029