問題タブ [aggregates]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hbase - HBASE へのデータ ウェアハウス スター スキーマのマッピング
仮説として、データ ウェアハウス環境にスター スキーマがあるとします。1 つの非常に長いファクト テーブル (数十億から数兆行と考えてください) と、カーディナリティの低いディメンション テーブル (100 ディメンション テーブルと考えてください) がいくつかあります。ディメンション テーブルの主キーを指す各ファクト テーブルの外部キーには、ビットマップ インデックスが付けられます。各ディメンション テーブルの主キーにも、ビットマップ インデックスが作成されます。これは高速結合のすべてです。すべてかなり標準的です。
データ ウェアハウスのパフォーマンスが低下し始めているとします。ビットマップ結合から結果を返すのにかかる時間は、ファクト テーブルが長くなるほど悪化します。ビジネス要件は、ファクト テーブルが成長し続けることです (1 年以上前のデータをアーカイブ ストレージに移動することはできません)。
以下の解決策を考えています。
- ファクト テーブルをハッシュ パーティションしますが、これは避けられない増大の問題を一時的に回避するだけです。
- データベースは、物理的なスター スキーマ データベースを複数のスキーマ/データベースとして分割します。1..N ファクト テーブルとそのディメンション コピー。それぞれがハッシュ (1..N) 関数を介して割り当てられたデータを保持します。この関数は別の ETL ステージング データベースで実行され、どのデータベース/スキーマがファクト行 (ETL の結果) であるかを判断します。プロセス)に入ります。ディメンションが変更された場合は、ディメンションに対応する他のデータベースに変更を複製します。繰り返しますが、これは永続的な解決策としては機能しません。
- ディメンションを折りたたんで、すべてのディメンション値をファクト テーブルに直接保存します。次に、ファクト テーブルを Hadoop 上の HBASE にインポートします。ディメンション テーブルを持たない大規模な HBASE テーブル、キー値ストアを取得します。結合は HBASE では法外なコストがかかるため、これを行います (結合をディメンション化することは事実ではありません。ディメンション列にディメンション値を適用するだけです)。
誰もこれをやったことがありますか?
解決策#3のヒントはありますか?
高速読み取りでスケールアップする限り、HBASE ソリューションは最適ですか?
書き込みに関しては、バッチ処理として時間外に行われるため、高速書き込みは気にしません。
解決策 1 または 2 を選択した人がいる場合、一貫したハッシュ アルゴリズムを使用した人はいますか? 完全な再マップを行わずにパーティション数を動的に増加させることは、おそらくオプションではありません (パーティション化されたテーブルに関する限り、実際に行われたことはありません)。
多くの次元を持つ巨大なファクト テーブル (従来の DW スター スキーマ) を HBASE の巨大な次元のないテーブルに移動することに関する考え、アドバイス、経験はありますか?
関連する質問:
従来、マテリアライズド ビュー (または、最も詳細なファクト テーブルと同じディメンションにリンクされた別のファクト テーブルとして (または、ベース ファクト テーブルが時間単位である時間単位、日単位、週単位、月単位など) に存在するデータ コレクションをデータに集約する方法HBASE への倉庫マップ?
私の考えでは、HBASE にはマテリアライズド ビューがないため、集計データ コレクションは HBASE テーブルとして格納され、最も詳細で最低レベルのファクト テーブルに変更があった場合はいつでも更新/挿入されます。
HBASE の集計テーブルについて何か考えはありますか? Hive スクリプトを使用して、最も詳細なファクト テーブルへの変更時に、集計データが格納されているセカンダリ HBASE テーブル (つまり、daily_aggregates_fact_table、weekly_aggregates_fact_table、monthly_aggregates_fact_table) の集計列データを更新する際にマテリアライズド ビューの動作を本質的に模倣した人はいますか?
entity-framework - 次のアーキテクチャの変更を考慮し、いくつかのアドバイスが必要です(ドメインエンティティ、DTO、集約)
約1年前、ASP.Net MVC 3(現在)のプレゼンテーション層、アプリケーション層、ドメイン層、インフラストラクチャ層(横断的なものとデータ)で構成されるソリューションをセットアップしました。現在、フロントエンドは1つしかないため、ドメインモデルをドメインロジックとは別のプロジェクトに保持し、DTOの代わりにドメインエンティティを渡すことで、プレゼンテーション層へのリラックスしたアプローチを使用することにしました。
メインのWebサイトに加えて、まもなく分散レイヤーのサービスを提供する予定であり、そこでDTOを使用しますが、メインのWebサイトでもDTOを使用することを検討しています。また、ドメインレイヤー(IRepository、IUnitOfWork、Entity / Valueオブジェクトのスーパータイプなど)でフレームワークコードをわざわざ分割する必要があるかどうかも疑問に思っています。ここで、フィードバックが必要な質問をリストアップしましょう。
1)貧血のドメインモデルを持たないことにかなり熱心に取り組み、プレゼンテーションの懸念に固有の動作にも注意しました。必要なビジネス計算のほとんどはドメインエンティティで行われます。プレゼンテーション層がこの動作を直接呼び出すことは問題ありませんか、それとも代わりにアプリケーションサービスを呼び出してドメインエンティティを呼び出す必要がありますか?これは、プレゼンテーション層にドメインエンティティについて認識させる理由がなく、代わりにDTOを使用できることを示唆しています。または、DTOにこれらの動作を公開させることもできますが、ドメインエンティティを奪っているような気がします。だから私はそれが最良の3つのオプション(直接呼び出されるリッチドメインオブジェクト、サービスレイヤーまたは動作付きのdto)だと思いますか?
2)現在、ドメインサービス、仕様、ロジックを備え、アプリケーション層とドメインモデル用の個別のプロジェクト(プレゼンテーション層とアプリケーション層で使用)によって調整されたドメインプロジェクトがあります。ここには、ジェネリックリポジトリと作業単位パターンのフレームワークインターフェイスもあります。フレームワークのものを別のプロジェクトに分割し、残りを1つのプロジェクトに結合する必要がありますか?
3)ドメインレイヤーを集約に再編成したいのですが、現在、すべてのドメインモデルはモジュールごとに編成されており、基本的に各モジュールのすべてのタイプが1つの名前空間にあります。エンティティ、値オブジェクト、サービス、その他のものを集計ごとに整理する方がよいでしょうか?
4)基本的に.net Frameworkヘルパーライブラリタイプであるインフラストラクチャサービスに分離インターフェイスパターンを使用する必要がありますか?たとえば、構成オブジェクトまたは検証ランナー?そうすることの利点は何ですか?
5)最後に、私が見た例の多くは、ドメインエンティティのインターフェイスを使用していません。私が持っているほとんどすべてのオブジェクトは、依存関係の理由でインターフェースを渡すことを好み、テストがはるかに簡単になります。コンクリートの代わりにインターフェースを使用することは有効ですか?EF 4.3.1(まもなく最新バージョンにアップグレードする)を使用していることを言及する必要があります。EFにはインターフェイスなどの使用に問題があったことを覚えているようです。ドメインエンティティの代わりにインターフェイスを公開する必要がありますか?
事前にどうもありがとうございました。
プロジェクト構造:
説明:Presentation.Web(MVC3 Webプロジェクト)
アプリケーション-ドメイン層を調整し、プレゼンテーション層からの要求に応答するサービス層(この更新を取得します)。これはモジュールごとに編成されています。たとえば、顧客モジュールがある場合はApplication.Customerがあり、その中にすべてのアプリケーションサービスがあります。
ドメイン-ドメインエンティティの動作として公開されていないドメインサービス、仕様、計算、およびその他のドメインロジックが含まれます。たとえば、アプリケーション層が呼び出すドメインサービスとして公開されている複数のドメインエンティティを含む計算。-仕様フレームワークのフレームワークコードと、汎用リポジトリおよび作業単位パターンのメインインターフェイスも含まれています。
Domain.Model-ドメインエンティティと列挙が含まれます。モジュールごとに整理されています。たとえば、customerエンティティ、customerorderエンティティなどを含むcustomerモジュールがある場合、これはドメインプロジェクトから切り離され、アプリケーションとプレゼンテーションレイヤーでオブジェクトを使用できるようになります。
Infrastructure.Security-認証と承認のためのセキュリティインフラストラクチャ
Infrastructure.Core-複数のレイヤー(バリデーター、ロギング、構成、拡張機能、IoC、電子メールなど)で使用される分野横断的なもの。ほとんどのプロジェクトは、インフラストラクチャサービスをこのプロジェクトのインターフェイス(domain.modelを除く)に依存しています。
Infrastructure.Data-LINQおよびEF4.3.1を介したリポジトリの実装、マッピングレイヤー、作業単位の実装。インターフェイスはドメインプロジェクトにあります(分離されたインターフェイスパターン)
php - ソート/フィルタリング ビジネス ロジックを DDD 集計に実装する
私は DDD にかなり慣れていないので、実用的な観点から集計の優れた関数を探しています。ユーザー ( User
) の長いリストがあり、そのための集計 ( UserAggregate
) を作成します。
私の見解では、さまざまな基準に基づいてユーザーを表示する可能性があります。ここで、データベース クエリでリストを並べ替えないと仮定しましょう。集計で並べ替えを行っても問題ないでしょうか。これを適切に実行できるアプリケーションの別の部分を思いつくことはできませんが、集計の機能を誤解している可能性があります。
ちなみに、フィルタリングについても同じことが言えます。DDD 集計について読んだとき、すぐにDoctrine\Common\Collections\Collection
(リンク) を思いつきました。そのようなものは、私には集合体のように見えます。だからDDDの専門家は、私を啓発してください:-)
アップデート
ところで、私が考えていた唯一の方法は、集計をかなり不平等にし、新しい集計を作成するヘルパーを用意することでした。しかし、これは進むべき道ではないようです:
2 番目の集計は新しいインスタンスであるため、ヘルパーは次のようになります。
templates - 剣道 - グリッド - FooterTemplate のカスタム集計
私の理解では、Kendo はカスタム集計をサポートしていませんが、footerTemplate で関数を呼び出すことができます。その関数は、データの計算を提供し、剣道で定義された集計を参照することさえできます。たとえば、
これが正しい場合、computeRange 関数をどのように記述しますか? 最大最小集計を使用します。
また、computeMedian 関数をどのように記述しますか?
よろしくお願いします。
sql - クエリ内の複数の集計関数
クエリに 2 つの集計関数が必要ですが、フィルター処理の方法がわかりません。
サンプル数と 1 より大きいサンプル数が必要です。
何かのようなもの:
サブクエリを実行できますが、このようにフィルタリングするより良い方法はありますか?
sql - 集約関数で最初のレコードを選択
マシンの電源が入るたびに毎朝データの記録を開始する温度計があります。
最小温度、最大温度、平均温度、および毎日のマシンのオン/オフ時の温度を選択したいと思います。
私のテーブル構造は次のとおりです。
記録された時間、記録された日付、温度
記録された日付でグループ化してその日の集計を取得しましたが、記録された最初と最後のタイム スタンプの温度を選択する良い方法が見つからないようです。
何か助けはありますか?
nosql - nosql ストレージでの集計とドメイン イベントの使用
私は実際にDDDとNoSqlフィールドをさまよっています。私は今疑問を持っています: 集計からイベントを生成する必要があり、NoSql ストレージを使用したいと考えています。しかし、イベントがストレージに保存され、集約ルートの変更がトランザクションを持たないことをどのように確認できますか? それは理にかなっていますか?イベント ソーシングやトランザクション データベースを使用せずにこれを行う方法はありますか? 実際、私は 2 フェーズ コミット アルゴリズムの実装を検討していましたが、パフォーマンスの観点からはかなり重いようです...問題に間違った方法でアプローチしていますか? 質問がいっぱいです...すべての提案に感謝します エンリコ
PS私はstackoverflowの初心者なので、提案/批評家/ ...は大歓迎ですエンリコ
編集 1
何かが起こったことを集約に通知するイベントが必要であり、変更に反応する必要があります。このようなイベントがビジネス ロジックにとって重要な場合に、問題が発生します。私が理解している限り、一晩考えた後、nosqlストレージを使用してそのようなことを行うことはできません。説明させてください (大きな声で考えます:P):
- ESあり(1stシーナリー):データの「差分」を保存します。次に、それに関連付けられたイベントを生成します。2操作。
- ESあり(2ndシーナリー):データの「差分」を保存します。プロセス、ES を監視し、イベントを生成します。しかし、私は、イベントの正しい順序付けを確実にするために、ウォッチャー プロセスを 1 つだけ持つことに縛られています。
- ES (3d シーナリー) あり: べき等イベント。イベントは状態によって推測でき、イベントを再適用するたびに、コンシューマーに 1 回だけ変更を加えることができ、複数の「デキュー」プロセスを持つことができ、重複が発生する可能性はありません。1 操作ですが、消費者に大きな制限をもたらします。
- 一般的に: 集計のデータを保存します。次に、それに関連付けられたイベントを生成します。2操作。
ドメインイベントがビジネスプロセスの基本的な部分である場合、ドメインイベントとnosqlを操作することは可能ですか? 同じパフォーマンスを得るためにかなり多くのマシンを追加する必要があるとしても、それはリレーショナルに移行するためのより良いオプションになると思います。
編集 2完全を期す ために、Google で「ドメイン イベント nosql べき等」を検索します。