Teknik Pengoptimuman Pangkalan Data dalam Node.js

DDD
Lepaskan: 2024-11-05 08:16:02
asal
340 orang telah melayarinya

Database Optimization Techniques in Node.js

Mengoptimumkan interaksi pangkalan data adalah penting untuk membina aplikasi Node.js berprestasi tinggi, terutamanya apabila data dan volum pengguna meningkat. Artikel ini akan merangkumi amalan terbaik untuk pengoptimuman pangkalan data, memfokuskan pada MongoDB dan PostgreSQL. Topik termasuk pengindeksan, pengoptimuman pertanyaan, penstrukturan data dan teknik caching.

Pengenalan kepada Pengoptimuman Pangkalan Data

Pengurusan pangkalan data yang cekap meningkatkan prestasi, mengurangkan kependaman dan mengurangkan kos. Sama ada anda bekerja dengan pangkalan data NoSQL seperti MongoDB atau pangkalan data hubungan seperti PostgreSQL, melaksanakan strategi pengoptimuman adalah penting.

Pengindeksan untuk Penyoalan Lebih Pantas

Indeks meningkatkan prestasi pertanyaan dengan mengurangkan jumlah data yang perlu diproses oleh enjin pangkalan data. Walau bagaimanapun, mencipta terlalu banyak indeks boleh melambatkan operasi tulis, jadi penting untuk mengindeks secara strategik.

Pengindeksan dalam MongoDB

Indeks dalam MongoDB boleh dibuat menggunakan kaedah createIndex. Berikut ialah contoh:

// Creating an index on the "name" field in MongoDB
const { MongoClient } = require('mongodb');
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

async function createIndex() {
    try {
        await client.connect();
        const database = client.db("myDatabase");
        const collection = database.collection("users");

        // Creating an index
        const result = await collection.createIndex({ name: 1 });
        console.log("Index created:", result);
    } finally {
        await client.close();
    }
}

createIndex();
Salin selepas log masuk
Salin selepas log masuk

Pengindeksan dalam PostgreSQL

Dalam PostgreSQL, indeks dicipta dengan pernyataan CREATE INDEX. Contohnya:

CREATE INDEX idx_name ON users (name);
Salin selepas log masuk
Salin selepas log masuk

Gunakan indeks kompaun apabila berbilang medan biasanya ditanya bersama:

CREATE INDEX idx_user_details ON users (name, age);
Salin selepas log masuk
Salin selepas log masuk

Mengoptimumkan Pertanyaan

Pertanyaan yang cekap menghalang penggunaan CPU dan memori yang berlebihan. Berikut ialah beberapa petua untuk mengoptimumkan pertanyaan:

Pengoptimuman Pertanyaan MongoDB

  1. Unjuran: Hanya dapatkan semula medan yang anda perlukan:
   // Retrieve only name and age fields
   const users = await collection.find({}, { projection: { name: 1, age: 1 } }).toArray();
Salin selepas log masuk
Salin selepas log masuk
  1. Rangka Kerja Pengagregatan: Gunakan saluran paip pengagregatan untuk menapis dan mengubah data dalam satu pertanyaan.
   const results = await collection.aggregate([
       { $match: { status: "active" } },
       { $group: { _id: "$department", count: { $sum: 1 } } }
   ]).toArray();
Salin selepas log masuk
Salin selepas log masuk

Pengoptimuman Pertanyaan PostgreSQL

  1. Gunakan LIMIT: Kurangkan saiz set hasil dengan LIMIT untuk mengelakkan pemuatan data yang tidak perlu.
   SELECT name, age FROM users WHERE status = 'active' LIMIT 10;
Salin selepas log masuk
Salin selepas log masuk
  1. Elakkan PILIH * Pertanyaan: Ambil lajur yang diperlukan sahaja:
   SELECT name, age FROM users WHERE status = 'active';
Salin selepas log masuk
  1. Gunakan EXPLAIN: Semak prestasi pertanyaan dan kenal pasti peluang pengoptimuman.
   EXPLAIN SELECT name FROM users WHERE age > 30;
Salin selepas log masuk

Menstruktur Data untuk Kecekapan

Pilihan struktur data memberi kesan kepada kecekapan penyimpanan dan pengambilan semula.

Reka Bentuk Skema MongoDB

  1. Benamkan Data untuk hubungan satu dengan satu dan satu dengan beberapa.
  2. Data Rujukan untuk perhubungan banyak-ke-banyak bagi mengelakkan pertindihan data.

Contoh:

  • Terbenam:
// Creating an index on the "name" field in MongoDB
const { MongoClient } = require('mongodb');
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

async function createIndex() {
    try {
        await client.connect();
        const database = client.db("myDatabase");
        const collection = database.collection("users");

        // Creating an index
        const result = await collection.createIndex({ name: 1 });
        console.log("Index created:", result);
    } finally {
        await client.close();
    }
}

createIndex();
Salin selepas log masuk
Salin selepas log masuk
  • Dirujuk:
CREATE INDEX idx_name ON users (name);
Salin selepas log masuk
Salin selepas log masuk

Reka Bentuk Jadual PostgreSQL

  1. Penormalan: Pisahkan data ke dalam jadual berkaitan untuk mengurangkan lebihan.
  2. Nyahnormalisasi: Untuk aplikasi berat baca, nyahnormalkan jadual untuk meningkatkan kelajuan pertanyaan.

Caching untuk Kependaman Dikurangkan

Caching menyimpan data yang kerap diakses dalam memori untuk akses yang lebih cepat. Ini amat berguna untuk pertanyaan yang tidak kerap berubah.

Melaksanakan Caching dengan Redis

Redis, stor data dalam memori, biasanya digunakan dengan Node.js untuk caching.

  1. Pasang Redis:
CREATE INDEX idx_user_details ON users (name, age);
Salin selepas log masuk
Salin selepas log masuk
  1. Sediakan caching dalam Node.js:
   // Retrieve only name and age fields
   const users = await collection.find({}, { projection: { name: 1, age: 1 } }).toArray();
Salin selepas log masuk
Salin selepas log masuk
  1. Kosongkan cache apabila data dikemas kini untuk mengekalkan konsistensi:
   const results = await collection.aggregate([
       { $match: { status: "active" } },
       { $group: { _id: "$department", count: { $sum: 1 } } }
   ]).toArray();
Salin selepas log masuk
Salin selepas log masuk

Menskalakan Aplikasi Node.js dengan Perkongsian Pangkalan Data

Untuk aplikasi trafik tinggi, pertimbangkan pembahagian pangkalan data, yang mengedarkan data merentas berbilang pelayan untuk prestasi yang lebih baik.

MongoDB Sharding

MongoDB membenarkan penskalaan mendatar melalui sharding. Kunci serpihan dipilih untuk memisahkan data merentas pelayan.

  1. Buat Kunci Shard: Pilih kunci serpihan yang mengagihkan data secara sama rata (mis., ID pengguna).

  2. Dayakan Perkongsian:

   SELECT name, age FROM users WHERE status = 'active' LIMIT 10;
Salin selepas log masuk
Salin selepas log masuk

Kes Penggunaan Dunia Sebenar: Mengoptimumkan Aplikasi E-dagang

Pertimbangkan aplikasi e-dagang dengan pangkalan pengguna yang berkembang pesat. Mengoptimumkan interaksi pangkalan data boleh mengurangkan kependaman dan meningkatkan kebolehskalaan. Begini cara menggunakan teknik yang kami bincangkan:

  1. Pengindeksan: Indeks medan yang kerap dicari, seperti product_id, category dan user_id.
  2. Pengoptimuman Pertanyaan: Minimumkan lajur yang tidak diperlukan dalam pertanyaan, terutamanya untuk set data yang besar.
  3. Struktur Data: Benamkan data untuk ulasan produk tetapi data rujukan untuk pesanan pengguna untuk mengelakkan pertindihan.
  4. Caching: Cache butiran produk dan troli pengguna dengan Redis, menyegarkan data secara berkala.
  5. Sharding: Shard pangkalan data mengikut user_id untuk mengimbangi beban merentas pelayan apabila pangkalan pengguna berkembang.

Kesimpulan

Pengoptimuman pangkalan data adalah penting untuk aplikasi Node.js yang cekap dan berskala. Teknik seperti pengindeksan, pengoptimuman pertanyaan, penstrukturan data, caching dan sharding boleh meningkatkan prestasi aplikasi dengan ketara. Dengan melaksanakan amalan terbaik ini, aplikasi Node.js anda akan mengendalikan peningkatan volum data dan trafik pengguna dengan berkesan.

Dalam artikel seterusnya, kami akan membincangkan pengelogan dan pemantauan amalan terbaik untuk aplikasi Node.js, memfokuskan pada alatan seperti Winston, Elasticsearch dan Prometheus untuk memastikan operasi lancar dan penyelesaian masalah pantas.

Atas ialah kandungan terperinci Teknik Pengoptimuman Pangkalan Data dalam Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan