Мы используем RavenDB в мультитенантной среде, пользователи могут создавать своих собственных клиентов и создавать там свои собственные приложения.
Проблема, однако, в том, что их базы данных время от времени простаивают (конечно, при принятии, но это случается и в производственной среде), и по какой-то причине для их перезагрузки требуется более 40 секунд. Но у нас есть только ~ 1000 документов и ~ 300 индексов (это план для приложения, которое должно содержать намного больше документов, когда оно будет запущено в производство), и все индексы имеют одно предложение Map
и 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:[],
....
РЕДАКТИРОВАТЬ
Приложение, о котором мы говорим, имеет два компонента: конструктор и среду выполнения. В ravendb мы храним дизайн и данные, созданные / используемые во время выполнения. И каждый арендатор - это приложение.
У нас так много индексов, потому что для каждого запроса, который вы создаете в режиме разработки, мы создаем индекс в ravendb.
Индексы имеют форму: Map from ... [from...|let...] [where ... ] select ...
с вызовами LoadDocument для загрузки необходимых связанных документов для заданных запросов lucene и аналогичных TransfromResults для формирования документов в требуемой форме.
Я исследую, сможем ли мы ослабить индивидуальную связь между запросами и индексами.
В: Что лучше: иметь несколько гигантских индексов, скажем, по одному для каждой Сущности, по которой мы запрашиваем, или найти какой-то средний план?
В: На данный момент мы не позволяем в нашем дизайне Сущностей иметь «сложные» сущности, то есть ничего, кроме свойств значений или ссылок на другие документы, может ли это повлиять, если у нас будет немного меньше и больше документов, и таким образом, нужно делать меньше обращений к LoadDocument(...)
?
Есть ли причина, по которой это занимает так много времени (40 с)? И любые возможные способы смягчить это будут оценены.