ฐานข้อมูลชนิดใดที่มักใช้ใน MMORPG [ปิด]


คำตอบ:


38

เราทำอย่างนั้นหวังว่า Ben Z จะให้เหตุผลที่ดีกว่าที่ฉันสามารถทำได้เพราะเขาเป็นผู้เขียนฐานข้อมูลดั้งเดิมของเรา รุ่นสั้นคือฐานข้อมูลเชิงสัมพันธ์นั้นไม่มีประโยชน์มากสำหรับเกมเนื่องจากไม่สามารถจัดเก็บข้อมูลแบบลำดับชั้นที่มีโครงสร้างอย่างหนักซึ่งทำให้ข้อมูลส่วนใหญ่ที่ MMO ต้องการสำหรับการทำงานปกติ เราเลือกที่จะสร้างฐานข้อมูลวัตถุที่กำหนดเองและเป็นส่วนหนึ่งของระบบประมวลผลธุรกรรมแบบกระจายซึ่งขณะนี้อยู่ระหว่างการผลิตและเปิดเกมสดสองเกมของเรา

สำหรับถ้าคุณควรทำเช่นเดียวกัน? อาจไม่อย่างน้อยไม่ในตอนแรก ฉันจะยังคงสนับสนุนการหลีกเลี่ยง SQL แต่ตอนนี้มีตัวเลือกมากมายในโลก "NoSQL" ที่ไม่ได้มีอยู่ไม่กี่ปีที่ผ่านมา

ที่กล่าวมา MMO ส่วนใหญ่รันบนฐานข้อมูล SQL (เชิงสัมพันธ์) ฉันรู้ว่าอีฟทำงานบนการติดตั้ง SQL Server ซึ่งอยู่ด้านบนของ RAMSAN ที่มีหลาย TB (ฉันอาจจะไม่เคยมีเงินมากเท่ากับสิ่งที่คิดค่าใช้จ่าย)

แก้ไข: หวังว่าเขาจะไม่รังเกียจที่ฉันโพสต์สิ่งนี้ที่นี่ แต่นี่เป็นรายการบล็อกที่มีลิงก์และความคิดเห็นเกี่ยวกับงานนำเสนอที่ GDC'08 เกี่ยวกับฐานข้อมูลของเรา


1
+1 ฉันคิดว่าคนส่วนใหญ่จบลงด้วยการเขียนฐานข้อมูลของตัวเอง แต่มันก็เจ๋งมากที่โลก NoSQL กำลังเติบโต
Jesse Dorsey

5
แม้ว่าคุณจะจบการปรับแต่งบางอย่างในภายหลังอาจมีฐานข้อมูลอย่างน้อยหนึ่งตัวที่คุณสามารถสร้างต้นแบบได้
coderanger

9
coderanger มันถูกต้อง ฉันเขียนฐานข้อมูลที่กำหนดเองสำหรับ MMO ถ้าฉันจะทำมันอีกครั้งในโลกปัจจุบันฉันอาจจะมองอย่างใกล้ชิดในการปรับเทคโนโลยีที่มีอยู่เพราะในขณะที่เขากล่าวว่าโลกมีความกระตือรือร้นมากกว่าเดิมเมื่อ 4 ปีที่แล้ว ในความเป็นจริง MMOs หลาย ๆ ตัวทำงานบน SQL บางส่วนก็ทำงานได้ดีและบางส่วนก็ทำงานได้ไม่ดีนัก การเห็นพ้องด้วย Max shard (ตรงข้ามกับ max zone หรือทวีปพ้องด้วยกัน) อยู่ในระดับต่ำสำหรับเกมเหล่านั้น
Ben Zeigler

2
"เพราะพวกเขาไม่สามารถจัดเก็บข้อมูลลำดับชั้นที่มีโครงสร้างอย่างหนักซึ่งประกอบไปด้วยข้อมูลส่วนใหญ่ที่ MMO ต้องการสำหรับการทำงานปกติ" - นั่นเป็นความจริงในการพัฒนาแอปพลิเคชันมากกว่าในการเขียนโปรแกรมเกม น่าเสียดายที่เราติดอยู่กับสิ่งที่เรามีและเนื่องจากประสิทธิภาพ (และความพร้อมใช้งานของ DBAs) สำหรับโซลูชั่น NoSQL ในปัจจุบันไม่สามารถเทียบได้กับ RDBMS เราจึงต้อง smush และ smudge ข้อมูลของเราในรูปแบบที่ใช้งานได้สำหรับ RDBMS ของ
BlueRaja - Danny Pflughoeft

1
นั่นอาจเป็นจริงเมื่อหลายปีก่อน แต่ขณะนี้มีฐานข้อมูลจำนวนมากที่เสนอลักษณะการทำงานที่จำเป็น
coderanger

35

เอาล่ะคำตอบนี้เป็นข้อสังเกตมากกว่า

การเปิดเผยแบบเต็มฉันไม่ได้ทำงานกับ MMORPG ฉันได้ทำงานในสิ่งที่เป็นหนึ่งใน 10 อันดับแรกของเว็บไซต์ที่มีผู้เข้าชมมากที่สุดในปี 2009 และฉันได้ทำงานกับ บริษัท เกมเอ็นจิ้นที่คิดว่าพวกเขากำลังสร้างเทคโนโลยี MMORPG (ฉันไม่รู้ว่าจัดส่งแล้ว)

ถ้าคุณดู บริษัท ที่ประสบความสำเร็จในระดับสูง (Google, Facebook, Twitter, ฯลฯ ) ฉันรู้ว่าพวกเขาไม่ใช่ บริษัท เกม แต่พวกเขาน่าดูในพื้นที่นี้) มีสองสิ่งที่ฉันคิดว่าสำคัญ

  1. พวกเขาเริ่มต้นด้วยการคว้าสิ่งที่ราคาถูกและง่ายต่อการทำให้ตัวเองไป
  2. ในที่สุดพวกเขาจะต้องม้วนเทคโนโลยีจำนวนมากด้วยตัวเอง (และบางครั้งฮาร์ดแวร์)

ข้อผิดพลาดใหญ่คือการคว้าสิ่งที่มีค่าใช้จ่ายสูงและคาดว่ามันจะเพิ่มขนาดอย่างน่าอัศจรรย์สำหรับคุณ มันไม่ทำงานอย่างนั้น กุญแจสำคัญในการเพิ่มขนาดคือการจัดการกับความท้าทายใหม่ ๆ อย่างเหมาะสม คุณต้องการความยืดหยุ่นในการแก้ปัญหาที่ใช้งานง่ายที่คุณสามารถย้ายเข้าและออกได้อย่างง่ายดาย

ดังนั้นคำแนะนำของฉันต่อคุณก็คือถ้าคุณเริ่มออกไปลองทำในสิ่งที่ปวดหัวน้อยที่สุด


25

โดยทั่วไปมีวิธีการที่หลากหลายและฉันคิดว่าพวกเขาได้รับการคัดเลือกตามประสบการณ์ของนักพัฒนาของพวกเขามากเท่ากับคุณสมบัติของฐานข้อมูล ที่ปลายด้านหนึ่ง MMO จำนวนมากกำลังใช้ฐานข้อมูลเชิงสัมพันธ์มาตรฐานเช่น Dark Ages of Camelot ใช้งาน / ใช้งาน (ยังอยู่หรือไม่) MySQL , FreeRealms ใช้Postgresql ที่แก้ไขแล้ว ฯลฯ

คุณมี Guild Wars: พวกเขาใช้ SQL Serverแต่พวกเขาเก็บข้อมูลไว้ในนั้นเป็น BLOB เดียว ซึ่งหมายความว่าพวกเขาได้รับประโยชน์จากรูปแบบไบนารี่ปกติของพวกเขาพร้อมกับสิทธิประโยชน์บางส่วนที่ฐานข้อมูลมอบให้ คุณอาจจะเห็นข้อเสียของวิธีการนี้เช่นกัน แต่สำหรับ บริษัท ที่เคยทำงานกับไฟล์แบบแบนก็อาจยังคงเป็นขั้นตอนต่อไป

จากนั้นอาจมีบางสถานที่ที่ใช้แนวทาง NoSQL ที่เป็นทางการแม้ว่ามันจะยังเร็ววัน Farmville ใช้membaseซึ่งพวกเขาทำขึ้นเพื่อจุดประสงค์โดยอิงจาก memcached คุณลักษณะนี้มีการแชร์หลาย ๆ อย่างเช่น MongoDB, CouchDB และอื่น ๆ อีกมากมายด้วยวิธีการเหล่านี้โดยทั่วไปแล้วคุณจะกลิ้งรูปแบบการจัดเก็บของคุณเอง แต่ได้รับประโยชน์จากการกระจายแคชแคชซ้ำซ้อน ฯลฯ

บางคนกำลังกลิ้ง NoSQL ของตัวเองโดยสิ้นเชิง: Cryptic กล่าวว่าพวกเขาทำสิ่งที่คล้ายกันแต่ก็บอกว่าพวกเขาไม่ได้ใช้มันในการผลิต ( แก้ไข : แต่ดูความคิดเห็นด้านล่าง)

และจากนั้นคุณก็มาถึงคนที่ใช้ไฟล์ข้อความหรือไฟล์ไบนารี - ฉันเข้าใจว่าเกมเก่า ๆ อย่าง Ultima Online, Everquest และอื่น ๆ ล้วนแล้วแต่เป็นเส้นทางนี้และสำหรับ บริษัท ที่มีประสบการณ์การพัฒนาเกม เกินไป.

โปรดทราบว่าคุณแทบจะไม่ต้องเขียนฐานข้อมูลของตัวเองในแง่ที่หลวม - ในเกมคุณจะมีข้อมูลแบบ bespoke ที่คุณต้องจัดการทั้งในหน่วยความจำหรือบนดิสก์ด้วยวิธีที่ไม่ได้ยืมตัวเอง ซอฟต์แวร์ทั่วไป คุณไม่สามารถทำการสืบค้น SQL ทุกครั้งที่คุณต้องการข้อมูลบางอย่างดังนั้นคุณจะต้องทำการมิเรอร์ข้อมูลจำนวนมากในโค้ดไม่ว่าคุณจะใช้งานอะไร


1
หากคุณเก็บไว้ในหน่วยความจำคุณจะต้องใช้ฐานข้อมูลในหน่วยความจำหรือคุณเสี่ยงต่อการทำซ้ำ / การสูญเสียไอเท็ม (ตัวอย่าง) เมื่อทำการซื้อขายข้ามโซน "เก็บไว้ในหน่วยความจำ" ใช้งานได้ตราบใดที่ผู้เล่นของคุณอยู่ในพื้นที่หน่วยความจำเดียวกันตลอดเวลา

1
ในขณะที่เป็นจริงสำหรับเวลาออนไลน์และ hitpoints ซึ่งไม่ได้รับประกันกรดในฐานข้อมูลของ Cryptic มันไม่เป็นความจริงสำหรับภารกิจสำคัญเช่นภารกิจสำคัญ (5/10 wolves kill) หรือรางวัล XP ซึ่งยังสามารถเกิดขึ้นได้หลายครั้งต่อวินาทีต่อผู้เล่น

1
สิ่งเหล่านั้นไม่จำเป็นต้องมีความหมายของทรานแซคชันถ้าคุณจัดการกับผู้ใช้ที่สูญเสียความคืบหน้าการค้นหาหากเซิร์ฟเวอร์เกิดปัญหาขึ้น ในกรณีของรางวัล XP นั่นอาจหมายถึงการสูญเสียเลเวลและเมื่อเกมล่มและคุณเสียเลเวลขั้นตอนต่อไปคือการหยุดเล่น

6
XP จำเป็นต้องทำธุรกรรมเป็นอย่างมาก หนึ่งในการหาประโยชน์เฉพาะที่นำไปสู่การสร้าง CrypticDB ในตอนแรก (เชื่อฉันฉันเขียน) เกี่ยวข้องกับ XP ได้รับบนเซิร์ฟเวอร์หลายเครื่องพร้อมกันและการซิงค์ล้มเหลวที่ผู้ใช้ขัดจังหวะ อะไรก็ตามที่มีความสำคัญต่อการพัฒนาของตัวละครจะต้องมีการทำธุรกรรมจริง ๆ มิฉะนั้นผู้เล่นจะต้องหาวิธีในการใช้ประโยชน์
Ben Zeigler

1
@ expiredninja: นั่นเป็นคำถามที่เปิดกว้างมาก แต่ด้วย 'flatfile' มันหมายถึง "การจัดลำดับโดยพลการไปยังดิสก์" ผู้พัฒนาเกมมักจะเขียนแต่ละฟิลด์ด้วย fprintf เช่น
Kylotan

10

ใน Pirates of the Burning Sea เราจ้องไปที่ MySQL (แม้ว่าโดยสุจริตฉันจะชอบ Postgres) และเมื่อมันเริ่มล้มลงภายใต้การโหลดเราเปลี่ยนไปใช้ Microsoft SQL Server แม้ว่าในความจริงแล้วฉันอาจจะไม่ไปเส้นทางนั้นอีกในอนาคต ข้อมูล PotBS ส่วนใหญ่ได้รับการจัดลำดับล่วงหน้าก่อนที่จะยังคงอยู่ดังนั้นส่วนใหญ่ของสิ่งที่อยู่ใน DB จึงไม่มีอะไรมากไปกว่าที่เก็บคีย์ / ค่าที่รก นอกเหนือจากนั้นเพื่อให้ได้ประสิทธิภาพที่ดีขึ้นจากชั้นการคงอยู่ของเราและการควบคุมวิธีการที่แคชข้อมูลในหน่วยความจำได้ดียิ่งขึ้นเราได้เขียนเซิร์ฟเวอร์แคชที่อยู่หน้าฐานข้อมูล

ดังนั้น Kylotan ที่ถูกต้องคุณจะไม่ได้หมุนตัวเองในระดับหนึ่ง เซิร์ฟเวอร์ฐานข้อมูลเชิงสัมพันธ์ของ SQL ไม่ได้ออกแบบมาสำหรับวิธีที่เกมใช้ข้อมูล แทนที่จะสมมติว่าเซิร์ฟเวอร์ฐานข้อมูลเชิงสัมพันธ์เป็นจุดสิ้นสุดของฐานข้อมูลทั้งหมดเราควรจะคิดถึงสิ่งที่เป็นประโยชน์ที่เรากำลังมองหาก่อนเลือกเครื่องมือ

ครั้งต่อไปฉันจะลองดูสิ่งต่าง ๆ เช่น BerkleyDB หรือบางส่วนของสไตล์ NoSQL อื่น ๆ


10

สิ่งอื่นที่ควรทราบคือถ้าคุณมีชุดข้อมูลสแตติก (ค่อนข้าง) อย่าเก็บไว้ในฐานข้อมูล! ไม่มีเหตุผลที่ดีจริงๆในการจัดเก็บคำจำกัดความการสะกดคำจำกัดความของรายการแผนที่ ฯลฯ ในฐานข้อมูล คุณไม่ค่อยทำการสืบค้นยกเว้นโดยใช้ชื่อ ฉันเห็นผู้คนมากมายกระโดดเข้าสู่การพัฒนาเกมโดยเก็บข้อมูลเหล่านี้ไว้ข้างๆข้อมูลผู้เล่นที่มีอยู่และมันเป็นสิ่งที่แตกต่างอย่างสิ้นเชิง

คุณต้องมีแหล่งข้อมูลเช่นเดียวกับระบบไฟล์สำหรับสิ่งเหล่านี้ นอกเหนือจากการพัฒนาคุณไม่ต้องการกรดคุณไม่ต้องการ CRUD คุณไม่ต้องการฐานข้อมูลสำหรับข้อมูลประเภทนั้น ในการพัฒนาคุณจำเป็นต้องมีฐานข้อมูล แต่คุณก็ต้องใช้ VCS ด้วยเช่นกันและตัวเลือกของ VCS จะทำให้ตัวเลือกฐานข้อมูลนั้นเหมาะกับคุณ

(หากคุณกำลังทำงานกับเกมที่ผู้เล่นสามารถสร้างคาถาหรือไอเท็มหรือเควสที่กำหนดเองได้ข้อมูลก็จะเหมือนกับข้อมูลของผู้เล่นและคุณต้องการฐานข้อมูลอีกครั้ง)


5

MMORPGs เป็นแอพที่เข้มข้นและเป็นภารกิจที่ยิ่งใหญ่ หากคุณเริ่มต้นด้วยการพัฒนาเกมฉันขอแนะนำให้คุณทำอะไรเล็กลง

ที่กล่าวว่าคุณจะต้องมีประสิทธิภาพสูงสุดสองบีบออกจากการตั้งค่าของคุณ เห็นได้ชัดว่าคุณต้องการเซิร์ฟเวอร์ฟาร์ม / กลุ่ม เนื่องจากการสื่อสารผ่านเครือข่ายมีราคาค่อนข้างแพง (และ MMORPG ส่วนใหญ่เป็นเรียลไทม์) คุณอาจต้องการทำซ้ำฐานข้อมูลกลางของคุณไปยังเซิร์ฟเวอร์เกมแต่ละเกมของคุณ (เทียบเท่ากับการจำลองแบบเวลาแฝงต่ำแบบเรียลไทม์

หากเซิร์ฟเวอร์แต่ละเครื่องของคุณให้บริการเฉพาะส่วนของโลกเกม (เช่น WoW ใช้งานได้); สิ่งที่ต้องการกระจายแบ่งเป็นผู้ชม DPV ช่วยให้คุณสามารถแบ่งกลุ่มแถวของฐานข้อมูลของคุณในเซิร์ฟเวอร์ต่างๆ ตามข้อ จำกัด ของคอลัมน์ในแต่ละเซิร์ฟเวอร์ ทั้ง MSSQL และ Oracle ฉลาดพอที่จะพูดคุยกับเซิร์ฟเวอร์ที่มีข้อมูลที่อยู่ในอนุประโยค WHERE หรือ ON ของคุณเท่านั้น ฉันไม่แน่ใจว่าข้อเสนอโอเพนซอร์สใด ๆ มี DPV หรือไม่

ผลลัพธ์สุทธิของสิ่งนี้คือมันไม่สำคัญว่าคุณจะใช้ฐานข้อมูลเพียงแค่ใช้ชื่อที่ดี: MSSQL, Oracle, MySQL, PostgreSQL เขียนฐานข้อมูลของคุณใน ANSI SQL และดูว่าระบบใดทำงานได้ดีที่สุดซึ่งเป็นวิธีเดียวที่จะค้นหา

เส้นทาง NoSQL อาจเป็นความคิดที่ดีเพราะมันถูกออกแบบมาสำหรับการทำงานพร้อมกันสูง คำแนะนำของ Pranny อาจใช้เล่ห์เหลี่ยม


5

ฉันใช้ MongoDB (NoSQL) มันเป็นที่เก็บเอกสารที่รวดเร็วที่สามารถเข้าถึงได้ผ่าน TCP ให้มันลอง! มันเจ๋งมาก!

การเขียนฐานข้อมูลของคุณเองเป็นภารกิจที่น่ากลัว ฉันขอแนะนำให้คุณสำรวจสิ่งที่มีอยู่แล้วและหากคุณไม่สามารถหาสิ่งที่ตรงกับเกณฑ์ที่คุณกำหนดให้สร้างของคุณเอง โอ้และอย่าลืมที่จะเปิดแหล่งที่มา :)


0

ฉันเดาว่ามันขึ้นอยู่กับว่าคุณต้องการเก็บข้อมูลประเภทใดและภายใต้รูปแบบใด

ฉันคิดว่าคนส่วนใหญ่ใช้ฐานข้อมูล SQL "มาตรฐาน" สำหรับข้อมูล "ไดนามิก" เช่นข้อมูลผู้เล่นไม่ว่าจะเป็น SQL Server, MySQL, PostgreSQL

อย่างไรก็ตามข้อมูล "ภายใน" (สถานะของโลก, เนื้อหา, .... ) สามารถเก็บไว้ในรูปแบบใด ๆ และฉันเดาว่า บริษัท ส่วนใหญ่จะเขียนระบบฐานข้อมูลที่กำหนดเองอย่างน้อยบางส่วนสำหรับส่วนนั้นซึ่งเหมาะสมกับความต้องการเฉพาะของพวกเขา .


0

จริง ๆ แล้วมันขึ้นอยู่กับใบสมัครของคุณ ฉันทำงานที่เราพัฒนาเกม RPG ทางสังคมและเราใช้ Google App Engine เป็นแบ็กเอนด์


0

คำถามนี้ค่อนข้างเก่า แต่ความคิดของฉันเกี่ยวกับวิธีการจัดการมันถูกต้องตามที่ถูกถามเหมือนวันนี้

หากคุณกำลังใช้ฐานข้อมูลเชิงสัมพันธ์คุณจะต้องลดภาระของมันลงเพื่อให้แนวคิดนี้น่าจะช่วยได้

เก็บข้อมูลสาธารณะทั้งหมดบนฐานข้อมูลโลคัลบนระบบไคลเอ็นต์แต่ละระบบรวมถึงในฐานข้อมูลเซิร์ฟเวอร์

จัดเก็บตารางทั้งหมดด้วยรายการในฐานข้อมูลลูกค้า แทนที่จะมองหาไคลเอนต์ไปยังเซิร์ฟเวอร์เมื่อคุณวางเมาส์เหนืออาวุธเพื่อดูสถิติลูกค้าเพียงแค่ตรวจสอบสถิติฐานข้อมูลในเครื่อง เซิร์ฟเวอร์มีฐานข้อมูลของตัวเองสำหรับดึงสถิติเมื่อทำการคำนวณและส่งต่อความเสียหายและสุขภาพที่เหลือให้กับลูกค้า

กรณีที่เลวร้ายที่สุดกับความคิดนี้คือทุกคนสามารถดูสถิติของอาวุธทั้งหมดหากพวกเขาจัดการเพื่อเข้าไปในฐานข้อมูลลูกค้า มันไม่สำคัญว่าจะเกิดจากแม้ว่าพวกเขาจะเปลี่ยนค่า แต่ค่าฐานข้อมูลบนเซิร์ฟเวอร์นั้นเป็นสิ่งที่คำนวณได้ในเกม


1
เมื่อคุณเก็บข้อมูลทั้งหมดในพื้นที่แบบนั้นแล้วมันไม่จำเป็นต้องอยู่ในฐานข้อมูลเลย
Josh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.