ogromna baza danych, przyśpieszanie

0

Załóżmy że mam bazę danych w pliku .mdb (access) no i w niej znajduje się około 20 000 000 (20 milionów) numerów lub wyrazów lub i tego i tego. zajmuje około 190 mega.

Jak ją uruchamiam w ms access to jak za pomocą sql wpisuje żeby coś w niej znaleźć to trwa to bardzo długo.
Jak to zmienić ? przyśpieszyć ? jakbym chciał żeby podłączyć do tej bazy aplikacjie w c# albo delphi przez ado to będzie trzeba czekać tak samo jak w accessie żeby to znalazło !
Jak ją tą bazę zmienić aby to działało szybko ? zmienić na inny rodzaj bazy ? czy może umieścić ją na jakimś serwerze dedykowanym ale to za drogo dla mnie.pomocy.

0
  1. do ogromnej bazy to Ci tak ze dwa zera w rozmiarze brakuje
  2. jeśli nie musi to być access to go olej bo jest wolny i zainteresuj się FireBirdem (dla delphi jak znalazł), postgresqlem albo MSDE (choć dwie ostatnie to jak armata na muchę). Jeśli dostęp ma być TYLKO z jednego stanowiska to jeszcze FireBird Embedded, SQLite i podobne
  3. no i wypadało by mieć indeksy na polach po których szukasz
0

ale to ma być baza + aplikacja którą będe mógł dowolnie rozpowszechniać, żeby inni nie musieli instalować nic oprócz mojego programu, i chce go napisać w c#, to może to firebird embedded albo sqlite z c# wrapperem to moze być ? (i czy mogą być też zastosowania komercyjne jak użyje tych baz?) dziękuję.

0

SQLite byłoby chyba dobrym wyborem.

0

No to jeśli ma być tylko Twoja aplikacja, to raczej Access odpada - w końcu jest to niezależna, komercyjna i droga aplikacja. Jeśli ma to być na zasadzie off-line (baza dołączona do programu), to tak jak Misiekd napisał, jakieś FB Embedded albo coś takiego - wystarczy. Jeśli ma być w sieci (na jakimś serwerze) i dostępna z komputera klienta, to jakąś wersję na wiele połączeń zdalnych.

0

zarówno FB jaki i SQLite są free

0

no i zrobiłem tą bazę w firebird embedded, są tam same wyrazy, jest ich około 5 000 000, jedna tabela, jedna kolumna, same wyrazy. żadnych dodatkowych rzeczy ani indexów nic. no i jak wyszukuję w c# np. select * from baza where dane like '%ż%' to wiecie ile musze czekać żeby mi wszytsko znalazło ? KUPE CZASU !!!!!! i co mam zrobić.dzieki.

0
krzysiek12121212 napisał(a)

no i zrobiłem tą bazę w firebird embedded, są tam same wyrazy, jest ich około 5 000 000, jedna tabela, jedna kolumna, same wyrazy. żadnych dodatkowych rzeczy ani indexów nic. no i jak wyszukuję w c# np. select * from baza where dane like '%ż%' to wiecie ile musze czekać żeby mi wszytsko znalazło ? KUPE CZASU !!!!!! i co mam zrobić.dzieki.

Zrób indeksy... [glowa]

0

po co ? jak tam są same wyrazy, szukam tylko wyrazów , po co mi indexy ?

0

przy takim zapytaniu

select * from baza where dane like '%ż%'

nigdy nie będzie szybko

0

no to co mam zrobić jak ona ma tak działać ? pomóż mi proszę. szybsze jest chyba zapytanie sql mające na celu znaleźć dane zawierające określone litery, niż znalezienie wszystkiego *, a potem wywalenie niepotrzebnych uzywajć stringów i operacji na nich w c# albo regex ów ? co mam zrobić proszę pomóżcie.

0

zrozum, że żeby znaleźć wszystkie wyrazy, które zawierają np. ż to trzeba sprawdzić KAŻDY wyraz z tych 5 000 000 i co byś nie zrobiłm gdzie byś tych danych nie miał i w jakiej strukturze to i tak musisz sprawdzić te 5 000 000 wyrazów.

Jeśli chciałbyś natomiast szukać np tak

SELECT * FROM baza WHERE dane LIKE 'ż%'

to wywołaj to zapytanie bez indeksów i z indeksami i zobaczysz czy Ci coś pomogą

0

nic nie pomagają, ale może jakbym je wszystki załadował do pamięci do jakiejś zmiennej, a potem tam robił przeszukiwanie może byłoby szybciej ?

musi być jakiś sposób żeby to zrobić i żeby to działało błyskawicznie. pomóżcie.

0

poszukaj pod hasłem struktury słownikowe, słowniki itp ale wątpię, czy to coś przyśpieszy

możesz też spróbować napisać listę jednokierunkową i tam te dane wpakować i po niej szukać

0

Jezeli wyszukiwalbys zawsze wedlug poczatkow slow (czyli like 'z%', itp) to moznaby jeszcze pobawic sie w drzewka trie, ale przy szukaniu typu like '%z%' to musialbys miec sporo poziomow drzewa - nie wiem czy nie zamienilbys siekierki na kijek.

0
  1. Po co Ci to?
  2. Można zbudować indeks bazujący na B+ drzewie, który wyszukuje szybko po "%z%, ale żaden znany mi system baz danych takiego indeksu utworzyć nie potrafi, bo takie wyszukiwanie generalnie nie jest do niczego potrzebne.
0

To niestety indexy nie pomoga w takim zapytaniu, bo po prostu nie dzialaja :(

Ale ktos zadal takie fajne pytanie: Po co ci to?
Moze jak odpowiedz na nie moze znadzie sie inne rozwiazanie

0
cobra napisał(a)

To niestety indexy nie pomoga w takim zapytaniu, bo po prostu nie dzialaja :(

W komercyjnych bazach danych nie działają. Ale jakby ktoś się uparł, to taki indeks można sensownie zaimplementować. Tylko po co?

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