Czy powinienem używać bazy danych do przechowywania treści gry? [Zamknięte]

16

Mam grę 2D napisaną w C ++ przy użyciu SFML. Chcę, aby gra mogła być rozwijana w taki sposób, aby zawartość taka jak przedmioty lub byty mogła być łatwo dodana poprzez dodanie linii / wpisu / wiersza do pliku lub bazy danych.

Szukam czegoś, co nie musi być wkompilowane w program, ale zamiast tego można je odczytać i zapisać w czasie wykonywania. Kiedy byłoby właściwe korzystać z bazy danych?

SinisterSloth
źródło
1
Proszę wyjaśnić swoje potrzeby bardziej. Bazy danych są dość szybkie, ale bardzo złożone. Czy naprawdę potrzebujesz prędkości? Dlaczego nie skorzystać z pliku tekstowego? Czy przeprowadziłeś test porównawczy?
Anko
Ile przedmiotów będziesz miał? Czy to ponad milion? To około progu, w którym rozważałbym użycie bazy danych zamiast plików tekstowych.
Philipp,
Powiedziałbym, że baza danych to przesada, po prostu użyj jakiejś listy definicji. Być może po prostu zwykły tekst. Rozważ XML lub JSON.
Hugo Zink,
1
Polecam również XML lub JSON. Wolę XML, ponieważ jako człowiek jest bardziej czytelny, ale JSON jest również dobrym wyborem.
Draco18s nie ufa już SE
Nie twierdzę, że mam dużą wiedzę na temat systemów danych lub ich implementacji w grach, ale powiem, że Microsoft ma tendencję do korzystania z implementacji mikrodanych dla wielu swoich prostych aplikacji (tych, które nie mają dużo dane lub potrzeby spoza bazy danych, ale zwykle mają „relacje” itp.). Tak długo, jak pamiętasz o łatwości użytkowania, może to mieć sens. (Zły pomysł: używanie super sformalizowanej przestrzeni nazw XML wymagającej poprawności danych)
Katana314,

Odpowiedzi:

26

Korzystaj z bazy danych tylko wtedy, gdy potrzebujesz bazy danych. To jest:

  • Jeśli musisz często wykonywać złożone zapytania.
  • Jeśli masz złożone relacje danych.
  • Jeśli Twoje dane są ogromne i prawdopodobnie nie mieszczą się w pamięci.

Jeśli dane gry spełniają którykolwiek z tych warunków, możesz skorzystać z bazy danych. Pamiętaj, że nie są one zbyt częste i prawdopodobnie nie spełniasz żadnej z nich. Jeśli tak, wybrałbym SQLite lub coś z podobnym pomysłem, że nie będzie wymagał działania serwera i bycia tylko biblioteką.

W przeciwnym razie podczas uruchamiania używaj plików i ładuj dane do pamięci. Jeśli chcesz, aby gra była modyfikowalna, załaduj te dane zarówno z katalogu gry, jak iz katalogów modów i określ sposób łączenia sprzecznych informacji.

Należy również pamiętać, że jeśli zrobić korzystać z bazy danych, to może skorzystać zarówno ty i deweloperzy modów to nadal używać plików do odczytu danych początkowych i zbudować bazę danych tylko wtedy, gdy gra się ładuje. O ile potencjalna wielkość tej bazy danych nie jest ogromna (tj. Kilkadziesiąt MiB), możesz chcieć użyć bazy danych w pamięci, co jest możliwe w SQLite, podając :memory:jako ścieżkę bazy danych .

Darkhogg
źródło
3
Zastanawiam się nad drugim SQLite, nawet jeśli twoje potrzeby NIE są „złożone” lub „ogromne”. Jest tak naprawdę wiele powodów, dla których z czymś takim małym i osadzonym w ten sposób możesz bardzo skorzystać z posiadania bazy danych na wyciągnięcie ręki.
wjl
Również platformy mobilne używają baz danych do przechowywania niektórych informacji. Android używa SQLite. Oznacza to, że większość pracy na platformach mobilnych została już wykonana (w zakresie przetwarzania danych). Ponadto bardzo łatwo jest skonfigurować SQLite i edytować dane SQLite (za pomocą programów takich jak SQLite Studio lub podobnych). Jeśli ma korzystać z SQLite, najlepszym rozwiązaniem byłoby użycie V3. Ale poza tym, natychmiast!
Ismael Miguel
@wjl: Zgadzam się, korzyści wynikające z normalizacji i ograniczeń integralności referencyjnej są tego warte, nawet w przypadku mniejszych zestawów danych gry. (Teraz, gdyby to nie był taki problem, aby SQLite wykonał odpowiednie ograniczenia integralności referencyjnej ...)
Mason Wheeler,
Jest to argument przeciwko używaniu relacyjnej bazy danych. Prosty indeksowany magazyn kluczy i wartości może być nadal opłacalny.
Mark
1
@ Mark Jeśli zamierzasz korzystać ze sklepu z kluczowymi wartościami w grze, równie dobrze możesz mieć po prostu mapę pamięci lub podobny.
Darkhogg
5

Bardzo podoba mi się MongoDB do rozwoju gier, ma naprawdę dobrą wydajność i jest naprawdę elastyczny, łatwy w użyciu i oparty na Json.

Możesz po prostu dodać dowolne pole, którego potrzebujesz w dowolnej kolekcji, ponieważ jest to NoSQL Arch, dzięki czemu pasuje naprawdę do każdego „dynamicznego” środowiska, takiego jak gry.

Rzuć okiem .

Jeśli tworzysz jakąś strategiczną grę MMO Turn, prawdopodobnie powinieneś przeczytać o CouchDB , jest to baza danych NoSQL, która ma naprawdę dobry system wersjonowania.

PRDeving
źródło
Nie dobra odpowiedź. Pytanie nie brzmiało „z której bazy danych powinienem korzystać”, ale raczej „czy w ogóle powinienem korzystać z bazy danych”.
uliwitness
1

CastleDB to dobra opcja, ponieważ jest to po prostu edytor, który konwertuje bazę danych na plik JSON. Widziałem wiele odpowiedzi, w których najlepszy jest plik w postaci zwykłego tekstu, więc CastleDB jest prawdopodobnie najlepszym z obu światów.

hjk231
źródło
Niezła odpowiedź, ale pomija pytanie. Pytanie nie brzmiało „z której bazy danych powinienem korzystać”, ale raczej „czy w ogóle powinienem korzystać z bazy danych”.
uliwitness,