Şu tasarımı verdiğimi varsayalım:MongoDB - Düz anahtarlarda arama yapmak kadar hızlı dizilerde mi arama yapıyor?
Şimdi şu şekilde sorguladım:
db.events.find({
participant_ids: ObjectId(...)
});
Bunun aynısı:
db.events.find({
participant_ids: {
$in: ObjectId(...)
}
});
Bu ikisi arasında performans farkı (ama yanılıyorsam düzeltin!).
Her etkinlik için en az 1 ve en çok 2 katılımcı vardır. Bu yüzden şu tasarımı kullanabilirim:
id | participant_1_id | participant_2_id
...
db.events.find({
$or: {
participant_1_id: ObjectId(...),
participant_2_id: ObjectId(...)
}
});
Endeksleme kullanmazsam, bu muhtemelen olmaz. Gerçekten bir fark yaratıyorsun, ama tabii ki ben.
İlk tasarım için aşağıdaki dizini kullanacağım:
db.events.ensureIndex({
participant_ids: 1
});
İkincisi için şunu yapacağım:
db.events.ensureIndex({
participant_1_id: 1,
participant_2_id: 1
});
Her ikisi de downsides performanslarına baktığınızda.
- 1. sorgu: Bir
Array
kullanılması, düz bir tuş kullanmanın muhtemelen daha yavaştır. - 2. sorgu:
$or
-operator kullanımı çok hızlı değil. - Çok ölçeklenebilir değil, diyebilirim ki katılımcılar sınırını bir süre serbest bırakmak istiyorum, bu mümkün olmayacaktı (
$or
- limitsiz anahtarlar ve sınırsız öğeleriniz var) sorguları).
Sorularım şunlardır: - Hangi tasarımı kullanmalıyım? - Array
s'yi indeksleyebilir miyim? Dokümanlar bu konuda bir şey söylemiyorlar ve emin değilim ki Array
'ler (içeriği çok fazla değişebildiğinden).
Çok teşekkür ederim! Korkarım ki daha yavaş olurdu (diğer rdb'ler Array'ı kullanmayan bir sebep olabilir). Sadece, ayrı tuşlar kadar hızlı olduğunu duymak harika (sadece daha okunaklı). – elslooo
Onaylandı. Performans farkı yok ve dizi versiyonu biraz daha esnektir. –