jolam
25.09.2009, 08:03:15
Podczas pracy z tą bazą natrafiła na kilka dziwnych zachowań i nie wiem czy to normalne.
Ale opowiem od początku. Stworzyłam sobie bazę danych, ale oczywiście nie przewidziałam wszystkiego i konieczne były zmiany. Z początku dodawanie kolumn i zmiany nazw kolumn. Ale później musiałam zmieniać definicje kolumn, a tego w sqlite nie da się zrobić. Więc kasowałam kolumnę i dodawałam nową już z poprawioną definicją. Następnie zaczęłam dodawać tabele. Rozmiar bazy bardzo wzrastał ale zaczęłam używać funkcji autovacum i vacum i już zmalał. Ale wczoraj postanowiłam przepisać (skopiować ) wszystkie dane z bazy do innego pliku, tak, żeby poćwiczyć php i sqlite. I okazało się, że ta skopiowana baza jest mniejsza. Zamiast 317kb ma 314kb. Sprawdziłam zawartosć jeszcze raz i jest ta sama. Myślałam, że jakiś błąd komputera, czy dysku i wykonałam kopiowanie bazy jeszcze raz i otrzymałam inny rozmiar 313kb. Potem kopiowałam ją jeszcze kilka razy i dostałam rozmiary od 311kb do 315kb. Dlaczego tak jest?
Postanowiłam potem sprawdzić szybkość baz. Użyłam funkcji microtime. I okazało się, że ta nowsza baza jest szybsza trochę. Różnica tym większa im więcej w pętli select wykonałam. Dlaczego tak jes?
I teraz moje właściwe pytania.
a- Czy zmiany bazy (dodawani, usuwanie i zmiany nazw kolumn i tabel) wpływają na jej jakość. Czy baza w której się nie zmienia żadnych definicji jest lepsza niż ta która się poprawia? To bardzo dla mnie ważne, bo nie zdobyłam jeszcze wiedzy pozwalającej na zrobienie baz bez poprawiania jej później.
b- Czy kolejność kolumn i tabel ma jakieś znaczenie? Ta baza to plik, więc może to co pierwsze zdefiniuje, to szybciej jest odczytywane?
c- W ogóle jest bardzo zaskoczona, bo ja myślałam, że w bazach tak jak i w programowaniu ogólnie można poprawiać błędy i liczy się tylko ostatnia wersja, nie ważne czy stworzona jednym poleceniem, czy 1000 poleceń.
Bardzo was proszę pomóżcie mi, bo ja teraz jestem już totalnie zagubiona w tym całym sqlite i bazach danych.
pozdrawiam serdecznie Jola
Riklaunim
25.09.2009, 10:43:26
Jak coś usuwasz w SQLite to żeby usunąć puste miejsca po tych danych należy wykonać polecenie SQL vacuum;
jolam
25.09.2009, 14:48:47
A przeczytałeś całego posta?
Cytat
Rozmiar bazy bardzo wzrastał ale zaczęłam używać funkcji autovacum i vacum i już zmalał.
A poza tym nie chodzi tylko o rozmiar bazy.
pozdrawiam Jola
Riklaunim
25.09.2009, 16:28:48
a,b - nie, lub pomijalne. Różne testy z bazą SQLite muszą uważać na np. keszowanie się pliku w pamięci podręcznej dysku i inne podobne zjawiska
jolam
25.09.2009, 22:51:32
Riklaunim no ale jak to jest? Są jakieś różnice w wydajności czy w ogóle ich nie ma? Bo jeśli w ogóle jakieś są to czuje się oszukana przez sqlite i przykro mi bo ja na prawdę wierzę (wierzyłam), że to taka fajna baza danych, ta łatwo ją przegrać i w ogóle.
A wracając do czyszczenia bazy. Co lepiej używać vacum czy auto_vacum? I jeszcze jedno, czy jest jakaś inna baza danych tak prosta jak sqlite ale z możliwością zmiany kolumn i tabel, no żebym mogła zmieniać definicje. Bo tak to tylko mi przegrywanie skryptem php bazy zostaje

A to nie jest fajne jak trzeba odczytać wszystkie rekordy ze wszystkich tabel i wpisać je do nowej bazy.
pozdrawiam Jola
Riklaunim
26.09.2009, 02:37:26
Nie ma tematu co do szybkości po modyfikacjach

Tyle. Co do edytowania baz SQLite to polecam sqlitebrowser - aplikacja desktopowa, w której można zmieniać strukturę table itd.
bartg
26.09.2009, 08:25:00
Jolam, sqlite uzywane jest tylko do mniejszych rzeczy, ponieważ ma słabą wydajność. Co prawda da się łątwo zgrać ale nie polecałbym jej używać przy większych projektach. Serwer nie wytrzyma obciążenia
dr_bonzo
26.09.2009, 11:02:27
Cytat
A wracając do czyszczenia bazy. Co lepiej używać vacum czy auto_vacum? I jeszcze jedno, czy jest jakaś inna baza danych tak prosta jak sqlite ale z możliwością zmiany kolumn i tabel, no żebym mogła zmieniać definicje. Bo tak to tylko mi przegrywanie skryptem php bazy zostaje A to nie jest fajne jak trzeba odczytać wszystkie rekordy ze wszystkich tabel i wpisać je do nowej bazy.
MySQLPowszechnie uzywana, masz do niej duzo narzedzi, ksiazek itd.
Da sie zmieniac strukture tabel, bez kasowania danych (np. typ kolumny).
Co do przegrywanai bazy - masz programy dostarczane z bazka: mysql i mysql_dump - dwie linijki w konsoli i masz zgrana i wrzucana bazke.
Riklaunim
26.09.2009, 13:00:50
Cytat(bartg @ 26.09.2009, 09:25:00 )

Jolam, sqlite uzywane jest tylko do mniejszych rzeczy, ponieważ ma słabą wydajność. Co prawda da się łątwo zgrać ale nie polecałbym jej używać przy większych projektach. Serwer nie wytrzyma obciążenia
SQLite jest wyraźnie szybsza dla operacji odczytu niż bazy serwer-klient typu MySQL. Jeżeli strona to głównie odczyt - SQLite będzie lepszym wyborem.
jolam
26.09.2009, 19:47:23
To mnie Riklaunim uspokoiłeś, że można bazę sqlite modyfikować bez obaw o jej jakość. Tak się cieszę.
A sqlitebrowser jest lepsze niż sqlitemenager w firefoxie? Czy ten sqlitemenager mógł coś popsuć w bazie? Chodzi o tą wydajność i generalnie jakość bazy. Bo ja nim dodawałam i usuwałam kolumny. Czy na pewno on nic nie miesza z bazą?
pozdrawiam Jola
jolam
27.09.2009, 04:48:34
Ale właśnie, że on nie działa z sqlite 3 tylko z sqlite 2. A ja mam sqlite 2

Czyli zostaje mi ręczne zmienianie bazy.
Riklaunim powiedz mi jak najsprawniej mogłabym robić te zmiany bazy? Chodzi o zmiany definicji kolumn i dodawani innych kolumn. Teraz to robię odczytując w tabeli wiersz po wierszu i wstawiam go do nowej tabeli z poprawioną definicją. Czy jest może jakieś ułatwienie? Czy można np wybrać baze1 a w niej tabele1 i z niej skopiować rekordy do nowej tabeli w nowej bazie wskazując jednocześnie, że np kolumnaA ma być skopiowana w miejsce kolumnyAnowa?
Da się tak zrobić? Albo jakoś podobnie, bo by mi to bardzo pomogło.
pozdrawiam Jola