Situs bekerja dengan nodejs+socketio+mysql.
Apakah normal untuk membuat objek global sebelum memulai aplikasi saya untuk menyimpan semua yang saya miliki di database? Sesuatu seperti hash kata sandi pengguna untuk proses otentikasi yang sangat cepat, bandingkan token + userid yang diberikan.

var GS= {
    users: {
        user1: {
            token: "Djaskdjaklsdjklasjd"
        }
        ,
        user555: {
            token: "zxczxczxczxc"
        }
        ,
        user1239: {
            token: "ertertertertertret"
        }
    }
};

Saat terhubung, node memeriksa pengguna dengan user_id yang diberikan.

if (GS.hasOwnPropery("user"+user_id)) {
  //compare gived token GS["user"+user_id].token
} else {
  //go to database to get unknown id and then store it in GS
  GS["user"+user_id] = { token: database_result };
}


Dan dengan segala sesuatu yang lain hal yang sama, menggunakan properti objek alih-alih menanyakan database. Jadi jika seseorang pergi ke url /gameinfo/id/1, saya hanya melihat di variabel GS["game"+url_param] = GS["game"+1] = GS.game1 Dan tentu saja, kita tidak berbicara tentang jutaan baris dalam database. Maksimal 50-70k.
Tidak terlalu ingin menggunakan sesuatu seperti Redis atau Tarantool.

1
Dialog 1 Januari 2018, 05:59

1 menjawab

Jawaban Terbaik

Anda dapat memiliki objek global untuk menyimpan info ini, tetapi ada sesuatu yang perlu dipertimbangkan:

  • Jika aplikasi Anda dijalankan oleh lebih dari satu mesin (instance), objek ini tidak akan dibagikan di antara mereka.
  • Hal ini menyebabkan beberapa kerugian fungsional, seperti:
    • Anda memerlukan sesi lengket untuk memastikan permintaan dari satu klien tertentu selalu diarahkan ke satu contoh tertentu
    • Anda tidak dapat memeriksa status pengguna yang menyimpan data di instance lain ...
    • Pada dasarnya, apa pun yang mengharuskan Anda mengakses data sesi pengguna, akan sulit, jika bukan tidak mungkin, untuk dilakukan
  • Jika server Anda mati, semua data sesi akan hilang
  • Memiliki objek bersarang yang besar dan dalam sangat mudah untuk dikacaukan

Jika Anda yakin bahwa Anda dapat mengatasi kelemahan ini, atau Anda tidak akan menemukannya di aplikasi Anda, silakan. Jika tidak, Anda harus mempertimbangkan untuk menggunakan pustaka cache nyata, kerangka kerja.

2
kkkkkkk 1 Januari 2018, 06:03