Bazy danych i danych przechowywanie - o co w tym biega?

Witam,

ostatnio w mych podbojach języka programowania, jakim jest C++, dotarłem do miejsca, w którym zaczynam mieć potrzebę przechowywania wielu danych. I stąd moje pytanie: w jaki sposób je przechowywać?

Nie za bardzo orientuję się, jak działają bazy danych i jak te dane zapisują (ew. jakie są możliwości), oraz czy jest jakaś różnica między trzymaniem tych danych w pliku tekstowym? Jeśli tak, to jaka, i przy jakich wielkościach/typach danych etc.?

Jeśli to ma jakieś znaczenie, to chcę przechowywać bazę słownikową (z osobnym indeksem), gdzie będzie przypadało ok. 30 zmiennych typu string lub integer na słowo.

Wiem, że pytania trochę naiwne, aczkolwiek jest to dla mnie temat zupełnie nowy :slight_smile:

Z góry dzięki za wszelką pomoc :slight_smile:

wystarczylby 1 temat

Skoro dopiero się uczysz C++ to pliki, przy okazji nauczysz się iostream. Większość programów trzyma ustawienia, różne dane itp. w plikach tekstowych, bazy danych są raczej dla dużej ich ilości, kiedy trzeba nimi sprawnie zarządzać. Najpierw naucz się tego co jest tu: http://www.cppreference.com/ , a później jak najbardziej można poszerzać swoją wiedzę o obsługę baz danych.

Która zupa smakuje najlepiej?

  • Grzybowa

  • Pomidorowa

  • Zależy

  • Obojętne

Nie ma uniwersalnego rozwiązania, które zawsze jest najlepsze. Jako że nie piszesz w jakim wypadku rozważasz wykorzystanie jednego czy drugiego rozwiązania, nie da się na Twoje pytanie odpowiedzieć.

A tym, którzy odpowiedzieli “baza danych” sugeruję się dokształcić.

Sorry za założenie kilka tematów, komputer bzikował podczas zakładania :stuck_out_tongue:

Konkretnie to chcę zrobić coś a la słownik, który będzie opisany za pomocą 30 zmiennych, np. znaczenie, część mowy, pochodzenie, wyrazy podobne etc.

W związku z tym, że miałoby to dotyczyć powiedzmy 50 000 słów opisanych ponad trzydziestoma innymi, to plik tekstowy mógłby trochę zajmować (160 000 linii z jednym słowem w pliku tekstowym zajmuje 34 mb), jednak chciałem to rozbić (np. po 10 000 słów, komputer by analizował pierwszą literę i szukał w pliku ze słowami tylko na daną literę, czyli ze 34 pliki), a samo wyszukiwanie odbywało by się w pliku ze spisem samych słów i danymi, gdzie te słowa się znajdują (żeby wyszukiwanie nie musiało “przelatywać” przez dane, które będą załadowane tylko do jednego słowa).

Jednak kolega mi powiedział, że w przypadku dużych plików bazy danych sprawdzają się bardziej. Kolega teoretyk. A jest to kwestia dla mnie o tyle ważna, że w miarę możliwości bazę słów chciałbym opracować przed zrobieniem API i interfejsu (bo format zapisu danych już opracowałem).

Szarex w jednej z kopii tego tematu napisał:

To nie baza adresów, to baza, która będzie zawierała pewnie koło 100 mb na język. Co do tych struktur z C… spróbuję się dowiedzieć coś na ten temat.

Co więc sugerujecie w tym przypadku?

Pozdrawiam,

WhizzKid

Zależnie od platformy użyj Jet Engine albo SQLite. 50tys słów to wystarczająco mało, żeby sobie SQL poradził lepiej niż oprogramowany przez Ciebie magazyn oparty na zwykłych plikach.

Hmm, a ile to jest za dużo dla tychże? I jeszcze jedno: gdybym kiedyś się zdecydował migrować z jakiegoś rozwiązania na inne, to czy byłoby to bardzo kłopotliwe?

Milion krotek to za dużo na takie małe silniki (zdecydowanie za dużo dla Jet). W okolicach miliona zależnie od sposobu użytkowania danych (czy pobierasz dane czy analizujesz ilościowo/jakościowo) należy wybrać dużego SQLa albo rozwiązanie autorskie.

Migracja nigdy nie jest prosta, ale zawsze jest wykonalna.

Ok, dzięki wielkie za pomoc :slight_smile:

Jeszcze drobna uwaga. “Około” w przypadku bazy danych oznacza o rząd wielkości więcej lub mniej, czyli około miliona to równie dobrze 100tys jak i 10mln.

Dobra, zapamiętam… aha, jeszcze jedna sprawa, trochę z dala od tematu… orientujesz się może (albo ktoś inny) jak zaimplementować pełną obsługę Unicode w programie? Słyszałem, że wystarczy wykorzystać odpowiednią bibliotekę, a jeśli tak, to ktoś wie jaką?