Saya memiliki permainan online di mana para pemain bisa membentuk dunia dengan beberapa cara - misalnya. Perumahan Ultima Online, tempat Anda dapat membangun rumah langsung ke bagian-bagian tertentu dari peta dunia. Ini adalah perubahan yang harus bertahan seiring waktu sebagai bagian dari dunia yang gigih.
Pada saat yang sama, tim desain menambahkan konten baru dan mengubah konten lama untuk meningkatkan dan memperluas permainan untuk pemain baru. Mereka akan melakukan ini pada server pengembangan terlebih dahulu selama pengujian dan kemudian harus menggabungkan pekerjaan mereka dengan "pekerjaan" para pemain di server langsung.
Dengan asumsi kami memperbaiki masalah desain game - mis. pemain hanya bisa membangun di area yang ditentukan, sehingga mereka tidak pernah berbenturan secara geografis dengan hasil edit desainer - apa cara yang baik untuk menangani data atau mengatur struktur data sehingga untuk menghindari konflik ketika data desainer baru digabungkan dengan data pemain baru?
Contoh 1: pemain membuat item jenis baru, dan gim tersebut memberikan ID 123456 untuknya. Contoh item itu semua merujuk kembali ke 123456. Sekarang bayangkan desainer game memiliki sistem yang sama, dan seorang desainer membuat item baru juga bernomor 123456. Bagaimana ini bisa dihindari?
Contoh 2: seseorang membuat mod populer yang memberi semua naga Anda aksen Prancis. Ini termasuk skrip dengan objek baru yang disebut assignFrenchAccent
yang mereka gunakan untuk menetapkan aset suara baru untuk setiap objek naga. Tetapi Anda akan menggunakan DLC "Napoleon vs Smaug" Anda yang memiliki objek dengan nama yang sama - bagaimana Anda dapat melakukan ini tanpa banyak masalah layanan pelanggan?
Saya telah memikirkan strategi berikut:
- Anda dapat menggunakan 2 file / direktori / basis data terpisah, tetapi kemudian operasi membaca Anda sangat rumit. "Show All Items" harus melakukan satu pembacaan pada DB desainer dan satu membaca pada DB pemain (dan masih harus membedakan antara 2, entah bagaimana.)
- Anda dapat menggunakan 2 ruang nama yang berbeda dalam satu toko, mis. menggunakan string sebagai kunci utama dan mengawali mereka dengan "DESIGN:" atau "PLAYER:", tetapi membuat ruang nama tersebut mungkin non-sepele dan ketergantungan tidak jelas. (mis. Dalam RDBMS Anda mungkin tidak dapat menggunakan string secara efisien sebagai kunci primer. Anda dapat menggunakan bilangan bulat dan mengalokasikan semua kunci utama di bawah angka tertentu, misalnya 1 juta, sebagai data perancang, dan segala sesuatu di atas titik itu menjadi data pemain. Tetapi info itu tidak terlihat oleh RDBMS dan tautan kunci asing akan melewati 'bagi', artinya semua perkakas dan skrip perlu secara eksplisit mengatasinya.)
- Anda selalu dapat bekerja pada database bersama yang sama secara waktu nyata, tetapi kinerjanya mungkin buruk dan risiko kerusakan pada data pemain dapat ditingkatkan. Itu juga tidak mencakup game yang berjalan di lebih dari 1 server dengan data dunia yang berbeda.
- ... Ada ide lain?
Terpikir oleh saya bahwa meskipun ini terutama merupakan masalah untuk game online, konsepnya mungkin berlaku untuk modding juga, di mana komunitas membuat mod pada saat yang sama ketika pengembang menambal game mereka. Apakah ada strategi yang digunakan di sini untuk mengurangi kemungkinan putus mod ketika tambalan baru keluar?
Saya juga menandai ini sebagai "kontrol versi" karena pada satu tingkat itulah yang terjadi - 2 cabang pengembangan data yang perlu digabung. Mungkin beberapa wawasan mungkin datang dari arah itu.
EDIT - beberapa contoh ditambahkan di atas untuk membantu memperjelas masalah. Saya mulai berpikir masalah ini benar-benar salah satu dari namespacing, yang dapat diimplementasikan di toko melalui kunci komposit. Itu menyederhanakan strategi penggabungan, setidaknya. Tetapi mungkin ada alternatif yang tidak saya lihat.