Kami tidak dapat membuat serial pendaftaran karena ada jutaan pengguna yang mendaftar secara bersamaan. Registrasi paralel perlu terjadi.
Katakanlah database tidak mengandung nama pengguna 'user1'. Ketika dua pengguna mencoba mendaftar pada saat yang sama dengan 'user1' itu akan menerimanya. Namun nantinya akan menimbulkan masalah. Ini seharusnya tidak terjadi.
Saya mencari solusi yang logis. Bukan sesuatu yang spesifik. Hanya ide untuk menyelesaikan ini.
database
multithreading
Addzy K
sumber
sumber
Jawaban:
Mengapa itu menerimanya? Sangat mudah untuk menerapkan batasan unik, menggunakan nama pengguna sebagai kunci utama, atau cukup menjalankan kode aplikasi check-in di dalam suatu transaksi.
Anda harus benar-benar dapat menggunakan transaksi basis data untuk menggunakan basis data untuk mencegah hal ini terjadi. Jika tidak, tidak ada aplikasi yang dapat mempertahankan invarian dalam data basis data.
Dalam hal penskalaan, basis data sudah menemukan teknologi yang Anda butuhkan, seperti berbagai mode penguncian tergantung pada jenis konsistensi yang Anda butuhkan, basis data terdistribusi untuk beberapa server basis data, dll.
sumber
Ada solusi standar untuk ini. Buat beberapa pekerja untuk melakukan registrasi. Setiap permintaan memiliki hash yang diterapkan pada nama pengguna, dan hash menentukan pekerja mana yang memproses permintaan tersebut. Dengan cara ini tidak ada cara yang memungkinkan untuk dua permintaan untuk nama pengguna yang sama dapat diproses secara bersamaan.
Untuk volume permintaan seperti ini, pertimbangkan penyimpanan nilai kunci terdistribusi seperti risiko alih-alih semua basis data sebagai penyimpanan data.
sumber
Apakah ini masalah?
Membiarkan dua pengguna menyelesaikan pendaftaran mereka dengan nama pengguna yang tidak unik tidak dapat diterima jika nama pengguna (dan bukan email pengguna) digunakan untuk login.
Jika nama pengguna tidak digunakan untuk otentikasi, Anda dapat menggunakan menggunakan beberapa proses latar belakang untuk mengidentifikasi dan menandai ganda (misalnya berdasarkan cap waktu) dan memaksa pengguna untuk mengubah nama pengguna pada masuk berikutnya
Ya itu masalah
Saat Anda bertanya, saya menduga bahwa nama pengguna tersebut seharusnya merupakan id unik. Pendekatan berikut dapat digunakan:
sumber
Pertimbangkan kembali apa yang Anda anggap sebagai pengidentifikasi unik bagi pengguna. Setiap pengguna sudah memiliki alamat email yang unik, sehingga masalah tersebut telah dipecahkan untuk Anda. Tentu saja, ini berarti bahwa banyak pengguna akan dapat mendaftarkan nama yang sama, seperti "Mike Nakis". Apakah ada masalah dengan itu? Apakah kamu yakin Itu bukan masalah untuk facebook, misalnya. Ada beberapa pengguna facebook yang disebut "Mike Nakis". Lihatlah halaman login facebook: ia meminta "email atau telepon" dan "kata sandi".
sumber
Dengan jutaan pengguna yang mendaftar pada saat yang sama, Anda hanya menggunakan server pendaftaran 26 x 26, satu untuk pengguna yang dimulai dengan aa, satu untuk pengguna yang mulai dengan ab dan seterusnya. Akibatnya, hanya ada ribuan pengguna yang mendaftar di setiap server secara bersamaan. Jika Anda masih tidak bisa mengatasinya, gunakan server 26 x 26 x 26.
sumber