MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Membuat spring-data-mongodb multi-tenant

Ada beberapa cara menguliti kucing di sini. Pada dasarnya semua bermuara pada tingkat mana Anda ingin menerapkan sewa.

Dasar

Pendekatan dasarnya adalah untuk mengikat beberapa jenis kunci yang mengidentifikasi pelanggan pada basis per-utas, sehingga Anda dapat mengetahui tentang pelanggan yang terkait dengan rangkaian eksekusi saat ini. Ini biasanya dicapai dengan mengisi ThreadLocal dengan beberapa informasi terkait otentikasi karena Anda biasanya dapat memperoleh penyewa dari pengguna yang masuk.

Sekarang jika itu ada, ada beberapa pilihan tempat untuk menerapkan pengetahuan penyewa. Biarkan saya menguraikan secara singkat yang paling umum:

Multi-tenancy di tingkat database

Salah satu cara untuk memisahkan data untuk beberapa klien adalah dengan memiliki database individual per penyewa. Abstraksi inti Spring Data MongoDB untuk ini adalah MongoDBFactory antarmuka. Cara termudah di sini adalah mengganti SimpleMongoDbFactory.getDb(String name) dan panggil metode induk dengan nama database mis. diperkaya dengan awalan penyewa atau sejenisnya.

Multi-penyewaan di tingkat pengumpulan

Pilihan lain adalah memiliki koleksi khusus penyewa, mis. melalui penyewa sebelum atau sesudah perbaikan. Mekanisme ini sebenarnya dapat dimanfaatkan dengan menggunakan bahasa Spring Expression (SpEl) di @Document collectionName anotasi atribut. Pertama, ekspos awalan penyewa melalui kacang Spring:

 @Component("tenantProvider")
 public class TenantProvider {

   public String getTenantId() {
     // … implement ThreadLocal lookup here
   }
 }

Kemudian gunakan SpEL dalam jenis domain Anda @Document pemetaan:

 @Document(collectionName = "#{tenantProvider.getTenantId()}_accounts"
 public class Account { … }

SpEl memungkinkan Anda untuk merujuk ke kacang Spring dengan nama dan menjalankan metode pada mereka. MongoTemplate (dan dengan demikian abstraksi repositori secara transitif) akan menggunakan metadata pemetaan dari kelas dokumen dan subsistem pemetaan akan mengevaluasi collectionName atribut untuk mencari tahu tentang koleksi untuk berinteraksi.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pengoptimalan kueri MongoDB

  2. Indeks parsial di mongodb / luwak

  3. Memutakhirkan basis data mongo yang lebih lama setelah peningkatan versi mongo yang tidak disengaja

  4. Bagaimana saya bisa memuat data dari koleksi mongodb ke dalam DataFrame panda?

  5. Pembaruan koleksi meteor dengan id tradisional