Предпосылки
Я создал базу данных с двумя сгенерированными коллекциями: пользователи и заметки.Каждый содержит ~ 1M документов.
Вот структуры:
user : (поле name
использует индекс пропускаемого списка):
{
"name": "Some user name"
}
примечание : (поле authors
содержит _key
s к документам из коллекции users
):
{
"title": "Some title",
"authors": [
"12345", "12346", "12347", ...
]
}
Задача
Мне нужно присоединитьсяusers
коллекция в поле authors
, а затем фильтр по пользователю name
, но это занимает слишком много времени.Это ~ 3,5 с на моем местном.Значение Specific name
встречается только один раз.
let specificUsers = (
for user in users
filter user.name == 'Specific name'
return user
)
for note in notes
let authors = (
for user in specificUsers
filter user._key in (note.authors != null ? note.authors : [])
return user
)
filter count(authors) > 0
// filter 'Specific name' in (authors[*].name) // this way takes even longer
limit 10
return merge(note, {
authors: authors
})
Если я опускаю фильтр count
или выполняю фильтрацию по «принадлежащим» атрибутам, он, конечно, быстро загружается.Но нужно на самом деле сделать фильтрацию по объединенной коллекции.Как и в реляционных базах данных.
Вопрос
Я делаю что-то не так или ArangoDB не должен работать хорошо в этом случае?
Пожалуйста, дайте мне знать, если мне нужнопредоставить более подробную информацию.