Cara menggunakan mongodb performance tuning

The massive volumes data generated by modern interconnected systems and devices has spawned a new kind of database known as NoSQL. Perhaps the best known of this new breed of non-relational database is MongoDB. Unlike traditional relational databases (RDBMSes), MongoDB does not contain tables. Instead, it stores data as collections of documents.

In the blog, we learned how to create a new database and collection using the Navicat for MongoDB database management & design tool. In today's follow-up, we'll learn about MongoDB documents and add some to our collection.

While MongoDB shares some of the same terms as those of traditional RDBMSes, others are unique to NoSQL databases. To help clarify, here's a table that compares RDBMS terminology to that of MongoDB:

RDBMSMongoDBDatabaseDatabaseTableCollectionTuple/RowDocumentcolumnFieldTable JoinEmbedded DocumentsPrimary KeyPrimary Key (Default key _id is provided by mongodb)

MongoDB stores data as documents. BSON is a binary representation of JSON documents, though it contains additional data types, in addition to JSON. MongoDB documents are composed of field:value pairs and have the following structure:

{
   field1: value1,
   field2: value2,
   field3: value3,
   ...
   fieldN: valueN
}

The value of a field can be any valid BSON data type, including other documents, arrays, and arrays of documents. Here's and example of a document that contains information about an American city. Notice the different data types:

// 1
{
    "_id": "01005",
    "city": "BARRE",
    "loc": [
        -72.108354,
        42.409698
    ],
    "pop": NumberInt("4546"),
    "state": "MA"
}

// 2
{
    "_id": "01012",
    "city": "CHESTERFIELD",
    "loc": [
        -72.833309,
        42.38167
    ],
    "pop": NumberInt("177"),
    "state": "MA"
}

// 3
//etc...

In the last blog, we created a database named "my_mongo_db" and collection named "my_first_collection". Now, we'll add some data to the collection in the form of documents.

  • The first step is to open the collection that we wish to add the document to. Select the "my_first_collection" object in the Object pane and click the Open Collection button on the Objects toolbar:
    Cara menggunakan mongodb performance tuning

    That will open the collection in a new tab.

  • You'll find the Document operations at the bottom of the tab. Click the Plus sign to add a document:
    Cara menggunakan mongodb performance tuning

  • In the Add Document dialog, enter the following fields, which are similar to those of the document samples above:
    {
        "_id": "01005",
        "city": "BARRE",
        "loc": [
            -72.108354,
            42.409698
        ],
        "pop": 4546,
        "state": "MA"
    }
    

    Cara menggunakan mongodb performance tuning

  • It's a good idea to validate the document before saving it. You can do that via the Validate button. The above data should produce a success message. Should errors be encountered, an error message will be presented with the first error in the document. The error will also include the line and column number in order to easily identify the error in the document:
    Cara menggunakan mongodb performance tuning

  • Click the Add button to close the dialog and save the new document. You should now see it in the Collection tab:
    Cara menggunakan mongodb performance tuning

You can add more documents by following the same process as above:

Cara menggunakan mongodb performance tuning

Now that we've learned how to add documents to our collection, in the next blog, we'll cover how to view, delete, and edit documents in Navicat for MongoDB.

Semakin besar dan rumit suatu sistem, semakin besar pula proses dan penyimpanan data yang dibutuhkan. Kestabilan dan performa database harus tetap optimal agar produktivitas tetap terjaga. Apabila performa database Anda terasa lambat dan kurang optimal, Anda dapat mencoba melakukan optimasi database dengan mengimplementasikan index pada database Anda.

Apa itu Index pada database?

Bagi yang gemar membaca pasti sudah tidak asing lagi dengan istilah index pada buku. Dengan index, kita dapat dengan mudah menemukan suatu topik pada buku yang sedang kita baca. Tujuan adanya index dalam database antara lain adalah untuk mempercepat pencarian data berdasarkan kolom tertentu.

Index adalah sebuah objek dalam sistem database yang dapat mempercepat proses pencarian (query) data.

Saat database dibuat tanpa menggunakan index, maka kinerja server database dapat menurun secara drastis. Hal ini dikarenakan resource CPU banyak digunakan untuk pencarian data atau pengaksesan query SQL dengan metode table-scan. Index membuat pencarian data menjadi lebih optimal karena lebih cepat dan tidak banyak menghabiskan resource CPU.

Baca Juga :
Query SQL Terasa Lama? Implementasikan Partisi Pada Tabel Anda!

Index merupakan objek struktur data tersendiri yang tidak bergantung kepada struktur tabel. Setiap index terdiri dari nilai kolom dan penunjuk (atau ROWID) ke baris yang berisi nilai tersebut. Penunjuk tersebut secara langsung menunjuk ke baris yang tepat pada tabel, sehingga menghindari terjadinya full table-scan. Akan tetapi lebih banyak index pada tabel tidak berarti akan mempercepat query. Semakin banyak index pada suatu tabel menyebabkan kelambatan pemrosesan perintah-perintah DML (Data Manipulation Language), karena setiap terjadi perubahan data maka index juga harus disesuaikan.

Kapan index diperlukan?

Ada beberapa alasan penggunaan index, yaitu:

  1. Kolom sering digunakan dalam klausa WHERE atau dalam kondisi join
  2. Kolom berisi nilai dengan jangkauan yang luas
  3. Kolom berisi banyak nilai null
  4. Tabel berukuran besar dan sebagian besar query menampilkan data kurang dari 2-4%

Perlu kita perhatikan bahwa terdapat beberapa kondisi dimana tidak diperlukan kehadiran index, yaitu ketika:

  1. Table kecil
  2. Kolom tidak sering digunakan sebagai kondisi dalam query
  3. Kebanyakan query menampilkan data lebih dari 2-4% dari seluruh data
  4. Table sering di-update

Contoh Pengaplikasian

Untuk mengetahui cara kerja dari index, mari kita coba buktikan dari performa database. Saya memiliki tabel DATA_PASIEN yang tidak memiliki index dan dengan jumlah record sebanyak 15 juta, seperti terlihat pada gambar:

SELECT COUNT (*) FROM DATA_PASIEN

Cara menggunakan mongodb performance tuning

Coba kita lakukan query pada tabel tersebut:

SELECT * FROM DATA_PASIEN WHERE PASIEN_ID = 33;

Cara menggunakan mongodb performance tuning

Bisa kita lihat bahwa untuk mengeksekusi query tersebut, diperlukan 18.332 detik. Kemudian saya tambahkan index pada tabel tersebut:

CREATE INDEX data_pasien_idx ON DATA_PASIEN(PASIEN_ID) NOLOGGING COMPUTE STATISTICS;

Cara menggunakan mongodb performance tuning

Setelah ditambahkan index, mari kita eksekusi query yang sama untuk tabelnya:

SELECT * FROM DATA_PASIEN WHERE PASIEN_ID = 33;

Cara menggunakan mongodb performance tuning

Menakjubkan bukan? Dengan hanya menambahkan index, kecepatan query bisa memangkas waktu eksekusi sampai 90%.

Baca Juga :
Sesi Q&A tentang MySQL bersama Rois Korniawan

Index pada Database Oracle

Oracle sebagai salah satu sistem database populer saat ini, mampu mendukung beberapa tipe index yaitu:

1. B-Tree

Suatu B-tree adalah tipe standar dari index yang tersedia pada Oracle, dan sangat berguna pada saat memilih row yang sesuai dengan kriteria tertentu. Index jenis ini bisa dibuat dengan perintah CREATE INDEX.
Contoh:
CREATE INDEX nama_pegawai_idx ON pegawai(nama);
B-Tree Index memiliki sub-tipe sebagai berikut:

  • Index-organized tables: Pada index-organized table, rows dimasukkan kedalam index yang di definisikan pada primary key table.
  • Reverse key indexes: Index yang digunakan untuk data yang sangat beragam(unik) atau increment.
    Contoh: CREATE INDEX nomor_ktp_idx ON biodata (nomor_ktp) REVERSE;
  • Descending indexes: Index yang memasukan data ke dalam kolom tertentu dalam urutan menurun.
  • B-tree cluster indexes: Index ini digunakan untuk mengindeks table cluster key.

2. Bitmap dan bitmap join index

Index yang biasa digunakan untuk kolom yang memiliki sedikit nilai yang unik, seperti jenis kelamin, agama, atau status perkawinan. Index ini biasa digunakan untuk point ke multiple rows.
Contoh: CREATE BITMAP INDEX jenis_kelamin_idx ON biodata (jenis_kelamin);

3. Function-based indexes

Selain melakukan index terhadap kolom, seperti kolom Nama misalnya, maka Anda juga dapat meng-index suatu kolom yang berbasis fungsi, misalkan fungsi UPPER. Function-based index akan memberikan kesempatan bagi Oracle optimizer beberapa pilihan ketika memilih execution path.
Contoh:
CREATE INDEX total_gaji_idx ON penggajian (gaji_pokok + bonus);

4. Partitioned indexes

Anda dapat menggunakan partition index untuk mendukung partitioned tables atau untuk menyederhanakan index management. Index partition dapat bersifat lokal bagi partisi tabel atau dapat pula bersifat global yang berpengaruh pada seluruh tabel.

5. Text indexes

Anda dapat meng-index nilai text untuk mendukung peningkatan pada kemampuan pencarian, seperti pencarian frase dan lain sebagainya. Text indexes merupakan himpunan dari tabel dan index yang dipelihara oleh Oracle untuk mendukung pencarian teks yang sangat kompleks. Oracle Database 10g menawarkan peningkatan pada text indexes yang mana menyederhanakan proses administrasi dan pemeliharaannya.

Baca Juga :
8 Tips Optimasi Query pada Oracle Database

Bagaimana cara menghapus index

Index tidak dapat dimodifikasi. Kita harus menghapusnya terlebih dahulu dan menciptakannya kembali. Kita dapat menghapus definisi index dari data dictionary dengan perintah DROP INDEX.

Contoh:
DROP INDEX employee_last_name_idx;

Selain menerapkan index pada tabel, kita bisa melakukan optimasi pada query, melakukan I/O Tuning, dan tentunya maintenance pada sisi database.
Bicara tentang sistem basis data saat ini, PostgreSQL merupakan pilihan sistem basis data yang cocok untuk perusahaan Anda. PostgreSQL selain open source dan free, juga memiliki fitur yang powerful yang mampu menghandle basis data setara level enterprise.

Ingin mendalami optimasi database langsung dari ahlinya? Bersama i3, Anda dapat mengikuti PostgreSQL Complete Administration Training.

Untuk info lebih lengkap mengenai training yang tersedia di i3, Anda dapat menghubungi langsung tim sales kami melalui halaman Contact Us.

Tentang i3

PT. Inovasi Informatika Indonesia (i3) dikenal sebagai perusahaan penyedia solusi dan layanan TI yang berfokus pada Open Source, Security, Big Data dan Cloud bagi bisnis. i3 menyediakan layanan TI yang komprehensif, meliputi konsultasi, migrasi dan implementasi, pelatihan, troubleshooting, dan managed services. Untuk informasi lebih lanjut perihal layanan dan solusi yang ditawarkan, Anda dapat menghubungi kami melalui [email protected].