Tôi có nên sử dụng cơ sở dữ liệu để lưu trữ nội dung trò chơi? [đóng cửa]


16

Tôi có một Trò chơi 2D được viết bằng C ++ bằng SFML. Tôi muốn làm cho trò chơi có thể mở rộng theo cách có thể dễ dàng thêm nội dung như vật phẩm hoặc thực thể bằng cách thêm một dòng / mục / hàng vào tệp hoặc cơ sở dữ liệu.

Tôi đang tìm kiếm một cái gì đó không cần phải được biên dịch vào chương trình, nhưng thay vào đó có thể được đọc và ghi vào lúc chạy. Khi nào thì thích hợp để sử dụng cơ sở dữ liệu?


1
Hãy làm rõ nhu cầu của bạn nhiều hơn. Cơ sở dữ liệu khá nhanh, nhưng rất phức tạp. Bạn có thực sự cần tốc độ? Tại sao không chỉ sử dụng một tập tin văn bản? Bạn đã chạy một điểm chuẩn?
Anko

Bạn sẽ có bao nhiêu món đồ? Có hơn một triệu không? Đó là về ngưỡng mà tôi sẽ xem xét sử dụng cơ sở dữ liệu trên các tệp văn bản.
Philipp

Tôi muốn nói rằng một cơ sở dữ liệu là quá mức cần thiết cho việc này, chỉ cần sử dụng một số loại danh sách định nghĩa. Có lẽ chỉ là văn bản đơn giản. Hãy xem xét XML hoặc JSON.
Hugo Zink

1
Tôi cũng khuyên dùng XML hoặc JSON. Tôi thích XML hơn vì nó dễ đọc hơn đối với tôi, với tư cách là một con người, nhưng JSON cũng là một lựa chọn tốt.
Draco18 không còn tin tưởng SE

Tôi sẽ không tuyên bố có nhiều kiến ​​thức về các hệ thống dữ liệu hoặc cách chúng được triển khai trong các trò chơi, nhưng tôi sẽ nói rằng Microsoft có xu hướng sử dụng các triển khai cơ sở dữ liệu vi mô cho nhiều ứng dụng đơn giản của chúng (những ứng dụng không có nhiều dữ liệu, hoặc nhu cầu bên ngoài cơ sở dữ liệu, nhưng có xu hướng có "mối quan hệ", v.v.). Chỉ cần bạn giữ cho dễ sử dụng trong tâm trí nó có thể có ý nghĩa. (Ý tưởng tồi: Sử dụng một không gian tên XML siêu chính thức bắt buộc tính chính xác của dữ liệu)
Katana314

Câu trả lời:


26

Chỉ sử dụng cơ sở dữ liệu nếu bạn cần cơ sở dữ liệu. Đó là:

  • Nếu bạn cần thực hiện các truy vấn phức tạp thường xuyên.
  • Nếu bạn có mối quan hệ dữ liệu phức tạp.
  • Nếu dữ liệu của bạn rất lớn và không có khả năng phù hợp với bộ nhớ.

Nếu dữ liệu của trò chơi của bạn thỏa mãn bất kỳ điều kiện nào trong số những điều kiện này, bạn có thể được hưởng lợi từ việc sử dụng cơ sở dữ liệu. Lưu ý rằng những điều này không phổ biến lắm và có lẽ bạn không thỏa mãn bất kỳ điều nào trong số chúng. Nếu bạn làm như vậy, tôi sẽ đi với SQLite hoặc một cái gì đó với ý tưởng tương tự là không yêu cầu máy chủ đang chạy và chỉ là một thư viện.

Nếu không, sử dụng tệp và tải dữ liệu trong bộ nhớ khi khởi động. Nếu bạn muốn trò chơi có thể sửa đổi, hãy tải dữ liệu này từ cả thư mục trò chơi của bạn và từ thư mục của mod và xác định cách kết hợp thông tin xung đột.

Cũng lưu ý rằng, nếu bạn làm sử dụng một cơ sở dữ liệu, nó có thể có lợi cho cả bạn và nhà phát triển mods' để vẫn sử dụng file để đọc dữ liệu ban đầu và xây dựng cơ sở dữ liệu chỉ khi trò chơi tải. Trừ khi kích thước tiềm năng của cơ sở dữ liệu này là rất lớn (tức là hơn vài chục MiB), bạn có thể muốn sử dụng cơ sở dữ liệu trong bộ nhớ, có thể có trong SQLite bằng cách chỉ định :memory:làm đường dẫn cơ sở dữ liệu .


3
Tôi rất muốn xem xét thứ hai SQLite, ngay cả khi nhu cầu của bạn KHÔNG "phức tạp" hay "khổng lồ". Thực tế có rất nhiều lý do tại sao với một cái gì đó nhỏ và được nhúng như vậy, bạn có thể hưởng lợi rất cao từ việc có một cơ sở dữ liệu trong tầm tay.
wjl

Ngoài ra, các bản đồ di động sử dụng cơ sở dữ liệu để lưu trữ một số thông tin. Android sử dụng SQLite. Điều này có nghĩa là hầu hết các công việc của bạn cho các bản đồ di động đã được thực hiện (về mặt xử lý dữ liệu). Ngoài ra, thật dễ dàng để thiết lập SQLite và chỉnh sửa dữ liệu SQLite (với các chương trình như SQLite Studio hoặc tương tự). Nếu đó là sử dụng SQLite, cách tốt nhất là sử dụng V3. Nhưng khác hơn, tại chỗ!
Ismael Miguel

@wjl: Đồng ý, lợi ích của chuẩn hóa và ràng buộc toàn vẹn tham chiếu rất đáng giá ngay cả đối với các tập dữ liệu trò chơi nhỏ hơn. (Bây giờ nếu chỉ có điều đó không phải là một nỗi đau để khiến SQLite thực hiện các ràng buộc toàn vẹn tham chiếu thích hợp ...)
Mason Wheeler

Đây là một đối số chống lại việc sử dụng một cơ sở dữ liệu quan hệ . Một cửa hàng khóa-giá trị được lập chỉ mục đơn giản vẫn có thể có giá trị.
Đánh dấu

1
@Mark Nếu bạn sẽ sử dụng kho lưu trữ khóa-giá trị trong trò chơi, bạn cũng có thể có một hashmap hoặc tương tự trong bộ nhớ.
Darkhogg

5

Tôi thực sự thích MongoDB cho trò chơi phát triển trò chơi, nó có hiệu suất thực sự tốt và nó thực sự linh hoạt, dễ sử dụng và dựa trên json.

Bạn chỉ có thể thêm bất kỳ lĩnh vực nào bạn cần vào bất kỳ bộ sưu tập nào vì đó là NoQuery Arch, vì vậy nó rất phù hợp với mọi môi trường "năng động" như trò chơi.

Cho nó một cái nhìn .

Nếu bạn đang phát triển một loại trò chơi chiến lược dựa trên MMO Turn nào đó, có lẽ bạn nên đọc về CouchDB , đó là Cơ sở dữ liệu NoQuery có hệ thống phiên bản thực sự tốt.


Không phải là một câu trả lời tốt. Câu hỏi không phải là "tôi nên sử dụng cơ sở dữ liệu nào" mà là "tôi có nên sử dụng cơ sở dữ liệu nào không".
uliwitness

1

CastleDB là một tùy chọn tốt vì nó đơn giản là một trình soạn thảo chuyển đổi cơ sở dữ liệu thành tệp JSON sau đó. Tôi đã thấy rất nhiều câu trả lời nói rằng một tệp văn bản gốc là tốt nhất, vì vậy CastleDB có lẽ là tốt nhất của cả hai thế giới.


Không phải là một câu trả lời xấu, nhưng bỏ lỡ câu hỏi. Câu hỏi không phải là "tôi nên sử dụng cơ sở dữ liệu nào" mà là "tôi có nên sử dụng cơ sở dữ liệu nào không".
uliwitness
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.