マルチテナント環境でRavenDBを使用しているため、ユーザーは独自のテナントを作成し、そこで独自のアプリケーションを作成できます。
ただし、問題は、データベースが時々アイドル状態になることです(確かに受け入れられますが、本番環境でも発生します)。何らかの理由で、データベースの再ロードに40秒以上かかります。ただし、ドキュメントは最大1000個、インデックスは最大300個(本番環境に移行するとさらに多くのドキュメントを含める必要があるアプリケーションの青写真)であり、すべてのインデックスに1つMap
の句と1つの句がTransformResults
あります。
バージョン:2.0.2230と2.0.2261の両方(執筆時点で最新の安定版)
一般的な統計
...
TransactionalStorageSize:26222592,
TransactionalStorageSizeHumaneSize:"25.01 MBytes",
IndexStorageSize:376263,
IndexStorageHumaneSize:"367.44 KBytes",
TotalDatabaseSize:26598855,
TotalDatabaseHumaneSize:"25.37 MBytes",
CountOfDocuments:975,
...
データベース統計
CountOfIndexes:305,
InMemoryIndexingQueueSize:0,
ApproximateTaskCount:0,
CountOfDocuments:975,
StaleIndexes:[],
CurrentNumberOfItemsToIndexInSingleBatch:256,
CurrentNumberOfItemsToReduceInSingleBatch:128,
DatabaseTransactionVersionSizeInMB:0.02,
....
Errors:[],
....
編集
私たちが話しているアプリケーションには、デザイナーとランタイムの2つのコンポーネントがあります。ravendbには、ランタイムで作成/使用されたデザインとデータが保存されます。そして、各テナントはアプリケーションです。
デザインモードで作成するクエリごとに、ravendbにインデックスを作成するため、非常に多くのインデックスがあります。
インデックスの形式は次のとおりです。from ... [from...|let...] [where ... ] select ...
特定のluceneクエリに必要な関連ドキュメントをロードするためのLoadDocument呼び出しと、必要な形式でドキュメントを形成するための同様のTransfromResultsを使用したマップ。
クエリとインデックスの間の1対1の結合を緩めることができるかどうかを調査します。
Q:いくつかの巨大なインデックスを用意する方が良いですか?たとえば、クエリを実行するエンティティごとに1つずつ作成するか、中間点を見つける方がよいでしょうか。
Q:現時点では、エンティティの設計で「複雑な」エンティティを使用することは許可されていません。つまり、値のプロパティまたは他のドキュメントへの参照以外は、ドキュメントが少し少なくて大きい場合に影響を与える可能性があります。したがって、 LoadDocument(...)
?への呼び出しを少なくする必要があります。
これに時間がかかる(40秒)理由はありますか?そして、これを軽減するための可能な方法があれば幸いです。