Saya melihat beberapa solusi untuk masalah Anda:
Jarang update
Untuk menghindari penggabungan, yang harus dilakukan di sisi klien dalam database NoSQL, masukkan semuanya ke dalam satu koleksi. Jika Anda tidak sering memperbarui, Anda dapat melakukannya
{
_id,
LastAccessDate,
HasException,
Account : {
AccountID,
UserName,
Email },
Device : {
DeviceID,
DeviceCode }
}
Ini menghasilkan data duplikat, tetapi jika kinerja (tidak ada gabungan) datang sebelum efisiensi memori, itu mungkin solusi yang cocok untuk Anda. Karena data disimpan beberapa kali, pembaruan lebih menuntut untuk server. Yaitu. memperbarui alamat Email akan terlihat seperti
db.myColl.update({"Account.UserName" : "User ToUpdate"}, {"$set" : {"Account.Email" : "[email protected]"} });
Karena Anda tidak memerlukan AccountID dan DeviceID untuk bergabung lagi, Anda juga dapat menghapus kedua bidang ini.
Sering diperbarui
Saat Anda sering melakukan pembaruan, alih-alih menyematkan, Anda dapat menggunakan Referensi. Saya pikir Anda harus menyelesaikannya di sisi klien. Anda kemudian memiliki tiga koleksi:
Akun:
{
_id,
UserName,
Email
}
Perangkat:
{
_id,
DeviceCode
}
Asosiasi:
{
_id,
account : {
"$ref" : "Account",
"$id" : ... }
device : {
"$ref" : "Device",
"$id" : ... }
}
Anda tidak memiliki duplikasi dengan cara ini, tetapi Anda harus berurusan dengan referensi.