cari

Rumah  >  Soal Jawab  >  teks badan

Adakah sistem tempahan kursus sesuai untuk senario mongodb?

Terdapat projek untuk tempahan kursus pengguna Kerana bahagian belakang mempunyai nod untuk melakukannya, mongodb adalah pilihan yang baik, bagaimanapun, kerana sistem tempahan kursus mempunyai maklumat tempahan kursus selepas pengguna berjaya membuat tempahan atau membatalkan Tempahan, pemahaman saya tentang mongo adalah ia tidak sesuai untuk digunakan dalam senario transaksi Saya tidak tahu banyak tentang reka bentuk pangkalan data. Saya ingin bertanya sama ada mongodb sesuai untuk projek seperti tempahan kursus.

巴扎黑巴扎黑2798 hari yang lalu751

membalas semua(1)saya akan balas

  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:27:40

    MongoDB tidak sesuai untuk urus niaga kukuh senario, tetapi banyak senario selalunya tidak memerlukan transaksi yang kukuh, dan boleh digantikan dengan konsistensi akhirnya. Banyak urus niaga yang kukuh juga boleh ditukar kepada keatomitian dokumen MongoDB melalui teknik penetapan model data untuk mengelakkan transaksi yang kukuh. Anda perlu menerangkan dengan lebih jelas jenis situasi yang anda bincangkan supaya anda boleh menilai sama ada ia boleh dielakkan.
    Untuk senario tempahan kursus yang saya faham, ia bukanlah senario kuat yang memerlukan MongoDB, tetapi ia bukan senario yang memerlukan RDBMS. Jadi untuk mengatakan sama ada MongoDB sesuai untuk digunakan, adalah disyorkan untuk menganalisis situasi tertentu secara terperinci.
    === Dikemas kini pada 2017.4.9 ===
    Berdasarkan kemas kini dalam ulasan, penjelasan tambahan berikut dibuat:
    Keperluan untuk mengehadkan bilangan orang boleh diselesaikan menggunakan atomicity dokumen MongoDB . Setakat yang saya faham senario pendaftaran, ia tidak lebih daripada merekodkan siapa yang telah mendaftar kursus mana, jumlah orang yang telah mendaftar, dan mengawal untuk tidak melebihi had pendaftaran. Kemudian struktur data kursus boleh direka bentuk seperti ini:

    {
        _id: ObjectId("58e9f6cd58d2c10959c8619a"),
        title: "MongoDB入门教程",
        intro: "演示用",
        createdAt: ISODate("2017-04-09T17:00:00Z"),
        createdBy: {
            userId: 12345,
            name: "MongoDB中文社区"
            // 其他必要的信息
        },
        allowedAttendeeQty: 50, // 允许参与的人数
        reservations: {
            qty: 0, // 已预订人数
            attendees: [123, 456, 789] // 参与人员ID
        }
    }

    Kursus ini boleh dikemas kini apabila seseorang mendaftar:

    var result = db.class.findAndUpdate(
        query: {
            _id: ObjectId("58e9f6cd58d2c10959c8619a"), 
            qty: {$lte: 50}    // 保证已报名人数小于50时才报名
        },
        update: {
            $inc: {
                "reservations.qty": 1 // 报名人数+1
            },
            $push: {
                "reservations.attendees": 102  // 新报名人员ID
            }
        }
    });

    Maksudnya, cari kursus ini mengikut ID kursus Jika bilangan pemohon kurang daripada nombor yang ditetapkan, pemohon baharu akan ditambah, jika tidak tiada perubahan akan dibuat. Jadi bagaimana untuk menilai sama ada pendaftaran berjaya? findAndModifySecara lalai, dokumen sebelum pengubahsuaian akan dikembalikan (dokumen selepas pengubahsuaian juga boleh dikembalikan). Jadi:

    if (result.reservations.qty < 50) {
        // 报名成功
    } else {
        // 报名失败
    }

    Untuk penggunaan findAndModify, sila rujuk db.collection.findAndModify(). Pengubahsuaian pada dokumen dalam MongoDB adalah atom, jadi tidak sukar untuk mencari bahawa update juga boleh menyelesaikan tugasan di atas dengan baik. Untuk perbandingan antara update dan findAndUpdate, sila rujuk: Bandingkan dengan Kaedah kemas kini

    balas
    0
  • Batalbalas