現在開発中のプロジェクトでRavenDBを使用しているため、まだユーザーがいません。私のバックグラウンドは、このプロジェクトまで常にリレーショナルデータベースでしたが、一般的にはNoSQLアプローチの方がはるかに好きです。ただし、トラフィックの多いNoSQLデータベース上に構築されたサイトでの作業や管理の経験はまだありません。Map / Reduceインデックスについて理解し始めており、ソリューションにいくつか含まれていますが、疑問に思っています。
Map / Reduceインデックスを作成する場合と作成しない場合について、従う必要のある経験則はありますか?
私はそれが私のシステムにあるビジネスオブジェクトとそれらが互いにどのように相互作用するかに非常に依存していることを知っています。インデックスを使用する必要があるクエリと、オブジェクトに直接クエリを実行できるクエリの全体像を把握するのに苦労していると思います。
これが私のビジネスドメインの一部の概要と、すでにインデックスを作成した場所です。
私のシステムは主にブランドと消費者で構成されています。それらのそれぞれは多くのソーシャルメディアアカウントを持っています。ユーザーがソーシャルメディアアカウントを介してサインインすると、インデックスとが表示されます。BrandsBySocialAccount
これらのコレクションは、それらのコレクションをフラット化し、ブランドまたは消費者のConsumersBySocialAccount
コレクションに関連付けます。UserId
取得したらUserId
、関連するブランドまたは消費者の記録を取得して、離れることができます。
ブランドは多くのキャンペーンを作成できます。ここに別のインデックスがありますCampaignsByBrand
。消費者がキャンペーンとどのように相互作用するかを追跡するための要件もあるため、キャンペーンには、キャンペーンで実行できるさまざまな相互作用の多くの追跡エントリを含めることができます。たとえば、外部からキャンペーンページへのリンクをたどったり、サイト自体からキャンペーンページを見つけたりすることができます。これを説明すると、ここにインデックスが必要なことは明らかです。インタラクションごとのインデックス(ClickLinkTrackingEntriesByCampaign
およびViewDetailsTrackingEntriesByCampaign
)または1つのインデックス(TrackingEntriesByCampaign
)相互作用が含まれています。ここでは複数のインデックスが過剰ですか?そうかも知れない。現在、4種類のインタラクションがあり、後で導入される可能性があります。レコードがいくつかある場合、これらのクエリは非常に高速です。しかし、数十万、さらには数百万のレコードがある場合でも、可能な限り高速になりますか?
全体的なデザインを見ると、コレクションのプロパティによってクエリされる必要がある可能性のあるコレクションプロパティを持つすべてのオブジェクトについて、Map/Reduceインデックスを作成する必要があるようです。それは従うべき経験則ですか?他にありますか-「これらのタイプのオブジェクトの相互作用がある場合は、これらの種類のインデックスの作成を検討する必要があります」