bazy danych, archiwizacja, jak to dziala

0

Hi,
Musze zrobic baze okolo 40 000*100 znakow.
Zapisuje to i odzytuje poprzez klase fstream
Sprawdzalem ze dostep w takiej bazie do ostatniego znaku trwa 3s (AMD 600)
To za duzo czasu. Nie moge bazy popdzielic na czesci bo zabrania mi tego sposob jej przeszukiwania. Pratycznie szukany znak (slowo) moze byc wszedzie.
Moje pytanie: 1. Czy wie ktos moze jak to zoptymalizowac (ja na rzaie robie to typem zmiennych ale i tak czas sie nie zmienia)
2. Jak to jest robione w bazach danych typu: access, paradox. Czy jesli bym uzyl takiej bazy to czas dostepu bylby mniejszy?
Przeciez oni rowniez musza czytac znak po znaku w pliku, czy w np.: accessie to sie inaczej odbywa, Stawiaja sobie jakieś znaczniki, flagi w pliku zeby szybciej wyszukiwac?
3. Czy uzycie relacyjnej bazy danych przyspieszy mi dzialanie?

Pozdrawiam i dzieki za odp.

0

Ja osobiscie, po stworzeniu takiej bazy poukladal bym rekordy np. alfabetycznie. Szukanie zaczynal bym wtedy tylko od pewnego momentu (od litery/znaku). Powinno to znacznie skrocic szukanie, lecz wydluzy tworzenie bo musi ustawic odpowiedni rekord w odpowiednim miejscu. Wybierz na czym ci bardziej zalezy.

0

A jeśli chciałby wyszukiwać w całym rekordzie? nie zaczynajć od jego początku?

0

Faszczu: właśnie o to chodzi ze takie podejscie nie wcodzi w gre, bo jeden obiekt to jest jakies kilka stringow i moge szukac po dowlonym z nich,swoja droga teraz widze w miare rozw. moglbym alfabetycznie poukladac te stringi obiektu tablicy wedlug ktorych szukam, za nimi wstawic jakis znacznik, i jesli znajde string to ten znacznik (offset) by mi wskazal reszte stringow obiektu
Ta reszta moglaby byc w innym pliku (plikach) i zaczynac sie wlasnie tym offsetem, jesli stworzylbym pliki o nazwach offsetu to by zalatwilo problem.
Bo w bazie głownej (kazdy string poustawiany alfabetycznie, czyli pomieszane rekordy danego obiektu) pobieram offset obiektu w ktorym jest znaleziony rekord , a potem otwieram plik o nazwie offsetu tego obiektu
Co o tym myslicie|??

PS. problem by byl gdyby string byl zdaniem "ala ma kota"
a ja bym szukal "kota", wtedy to odpada takie rozw.
Ktos ma jakies pomysly.
Eh, właśnie widze ze w zdaniu tez trzeba szukac, ale mozna to rowniez rozwiazac w powyzszy sposob, dzielac baze główna na pliki dot. kazdego rekordu np.: plik miast, plik imion, plik nazwisk. Kazdy rekord rekord w pliku mialby offset tego rekordu w tablicy obiektow, a potem to juz odwolac sie do pliku o nazwie numeru offsetu, w ktorym bylby jeden obiekt, co o tym myslicie. ?

Aha, i ponawiam pytania dot. baz danych, czy z ich uzyciem byloby szybciej

0

Baza Paradox 50 000 rekordów zapytanie SQL (tj. dowolny ciąg w zdaniu) 0.5 s (AMD 333), szukanie wg. indeksu (tj. wybrane pole, tekst szukany od początku zdania ) czas szukania <0.1 s.

  1. Czy uzycie relacyjnej bazy danych przyspieszy mi dzialanie?

To zależy czy zastosujesz relacje właściwe dla danych które szukasz.

0

Jeśli pracujesz pod Windowsem, możesz wykorzystać pliki mapowane (file mapping). Dostęp do takiego pliku odbywa się tak, jak dostęp do pamięci wirtualnej.

Ja w moim programie wykorzystywałem na początku FileStream (file stream w delphi to nic innego jak fileread i filewrite) do zapisu danych.
Jednak przy plikach > 5mb czas czytania pliku był stanowczo za duży.

Po przerobieniu na mapowania - oszałamiająca różnica.
Czas odczytywania/zapisywania pliku spadł z kilkunastu sekund do kilkunastu milisekund.

1 użytkowników online, w tym zalogowanych: 0, gości: 1