Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Menangani Pembuatan Indeks dengan MongoEngine dengan Python

MongoEngine adalah Object Document Mapper (ODM) untuk bekerja dengan MongoDB dari Python. Lapisan ODM memetakan model objek ke database dokumen dengan cara yang mirip dengan pemetaan model objek ke database relasional. ODM seperti MongoEngine menawarkan fitur seperti database relasional, mis. penegakan skema, kunci asing, batasan tingkat bidang, dll. di tingkat aplikasi.

Banyak sumber daya yang bagus tersedia untuk mempelajari penggunaan MongoEngine termasuk tutorialnya di sini.

Dalam postingan ini, kita akan membahas konstruksi pemrograman MongoEngine untuk membuat indeks sebagai tutorial python MongoDB dan overhead performa yang terkait dengannya.

Pembuatan Indeks Otomatis di MongoEngine

Secara default, MongoEngine  menyimpan dokumen dalam koleksi yang dinamai sebagai bentuk jamak dari nama kelas. Misalnya, kelas Pengguna yang ditunjukkan di bawah ini akan disimpan dalam koleksi bernama pengguna. Sebuah model harus mewarisi Dokumen kelas MongoEngine untuk menjadi objek yang dipetakan.

class User(Document):
    meta = {        
	'indexes': [
	{
	     'fields': ['+name']	               
	},
	{
	     'fields': ['#email']
	}]             
    }	

Kelas Pengguna yang didefinisikan di atas mendeklarasikan dua indeks:1. nama (urutan pengurutan) dan 2. email (di-hash). MongoEngine membuat setiap indeks yang dideklarasikan pada operasi upsert pertama. Indeks ini dibuat pada koleksi melalui panggilan createIndex/ensureIndex . MongoEngine mencoba membuat indeks ini setiap kali dokumen dimasukkan ke dalam koleksi.
Misalnya

User(name = "Ross", email='[email protected]",address="127,Baker Street").save()

Panggilan ini menghasilkan tiga permintaan perintah ke server database:dua perintah untuk memastikan bahwa nama dan indeks email ada di koleksi pengguna, satu untuk melakukan upser yang sebenarnya.

COMMAND [conn8640] command admin.$cmd command: createIndexes { createIndexes: "user", indexes: [ { background: false, name: "name_1", key: { name: 1 } } ] } keyUpdates:0 writeConflicts:0 numYields:0 reslen:149 locks:{ Global: { acquireCount: { r: 1, w: 1 } }, Database: { acquireCount: { W: 1 } } } protocol:op_query 0ms
COMMAND [conn8640] command admin.$cmd command: createIndexes { createIndexes: "user", indexes: [ { background: false, name: "email_hashed", key: { email: "hashed" } } ] } keyUpdates:0 writeConflicts:0 numYields:0 reslen:149 locks:{ Global: { acquireCount: { r: 1, w: 1 } }, Database: { acquireCount: { W: 1 } } } protocol:op_query 0ms
COMMAND [conn8640] command admin.user command: insert { insert: "user", ordered: true, documents: [ { name: "Ross", email: "[email protected]", address: "127, Baker Street", _id: ObjectId('584419df01f38269dd9d63c1') } ], writeConcern: { w: 1 } } ninserted:1 keyUpdates:0 writeConflicts:0 numYields:0 reslen:40 locks:{ Global: { acquireCount: { r: 1, w: 1 } }, Database: { acquireCount: { W: 1 } }, Collection: { acquireCount: { w: 1 } } } protocol:op_query 0ms

Ini ok untuk aplikasi di mana beban tulis rendah hingga sedang. Namun, Jika aplikasi Anda banyak menulis, hal ini berdampak buruk yang serius pada kinerja penulisan.

Menghindari Pembuatan Indeks Otomatis

Jika 'auto_create_index' disetel ke salah dalam kamus meta, lalu MongoEngine melewatkan pembuatan indeks secara otomatis. Tidak ada permintaan createIndex tambahan yang dikirim selama operasi penulisan. Menonaktifkan Pembuatan Indeks Otomatis juga berguna dalam sistem produksi yang biasanya menerapkan indeks selama penerapan database.
Misalnya,

meta = {
		'auto_create_index':false,
		'indexes': [
		        .....
        	]
       }

Jika Anda mendesain aplikasi intensif penulisan, masuk akal untuk memutuskan indeks Anda selama fase desain skema dan menerapkannya bahkan sebelum aplikasi diterapkan. Jika Anda berencana untuk menambahkan indeks pada koleksi yang ada, akan lebih baik untuk mengikuti dokumentasi untuk membangun indeks pada kumpulan replika. Dengan menggunakan pendekatan ini,  kami menurunkan server satu per satu dan membuat indeks     pada server tersebut.

Gunakan metode create_index MongoEngine untuk membuat indeks di dalam aplikasi:

User.create_index(keys, background=False, **kwargs)

Anda juga dapat menggunakan UI ScaleGrid untuk membantu Anda membangun indeks dengan 'Mode bergulir' tanpa waktu henti. Untuk detail lebih lanjut, lihat posting blog pembuatan indeks MongoDB kami.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 Cara Mendapatkan Definisi Stored Procedure menggunakan Transact-SQL

  2. Apa Langkah-Langkah Dalam Desain Basis Data?

  3. Pengelompokan dengan Pernyataan Kasus

  4. Cara Mengekstrak Substring Dari String di T-SQL

  5. Tujuan Baris, Bagian 2:Semi Bergabung