Mam spora tablice liczb rzeczywistych lub całkowitych którą muszę umieścić w bazie MYSQL (spora= od kilku do kilku tysięcy elementów). Pytanie - jak zapisać najefektywniej je w polu blob?
A dlaczego w polu Blob?? Z tego co się orientuję pole Blob stosuje się najczęściej do przechowywania grafik.
Nie lepiej po prostu zrobić tabele z polami: id (integer) jako primary key, value (float) do przechowywania wartosci?
Dla MySQL kilkanaście tysięcy to nie dużo:)
Problem polega na tym ze tablice maja rożny rozmiar, ilość elementów tez jest nie określona z czasem się ich trochę dodaje do bazy. Kilka tysięcy dla tablicy ok. ale jak będzie kilka tysięcy tablic?? Dodatkowo typ danych nie musi być zawsze taki sam w tablicach dane mogą mieć różny typ danych wiec uniwersalnym rozwiązaniem było by to ładowanie właśnie do bloba jako strumień jak grafikę (jeśli się da) . Tak mi sie przynajmniej wydaje chyba chyba ze istnieje jakieś lepsze rozwiązanie.
Proponuje varchar'a i ew. dodatkowe pole okreslajace typ danych.
a co chcesz potem robić z tymi danymi, któe zapiszesz?
Są to wyniki pomiarów. Które maja być udostępniane do dalszej analizy. Z poziomu aplikacji przez algorytmy napisane do niej a także jako dane wejściowe do innych programów (przekazywane przez aplikacje).
no to wypadało by najpierw te dane usystematyzować i jakoś posortować a dopiero potem zastanawiać się nad strukturą tabel
BTW jakby mi ktoś dał dane do analizy, które wyglądały by tak
1
2
kot
drzewo
5
biały
-2
rower
to bym mu powiedział "spieprzaj dziadu" :p
eeee hmm nie tak! To co jest trzymane w tablicach to tylko zarejestrowane przebiegi czasowe lub dane które są wynikiem danej analizy. Cala reszta danych potrzebnych do konkretnych analiz czy tez sortowania wyników, parametry, dane opisowe dostarczane i przetrzymywane są osobno bazie.
to ja proponuję zapisać to w tablicy
- id autoinc
wartosc_pomiaru typ_rzeczywisty-patrz niżej
numer_pomiaru (id_pomiaru) int
w mysqlu są napisał(a)
| REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
| FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
| NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
i jeśli potrzeba dodatkowa tablica
pomiary
*id_pomiaru
reszta danych
I tu wracamy do sedna sprawy! Czyli wynikiem pomiaru nie jest jedna liczba rzeczywista ale tablica (przebieg czasowy, macierz danych wynikowych z konkretnej analizy) Baza musi być na tyle uniwersalna ze sama struktura tych danych (pomiar obliczenia) może być różna, a jednak jakoś musi być zapisana, bez konieczności ingerencji w strukturę samej bazy danych. (dane opisowe to zupełnie inna sprawa i tu wiadomo ze musi być sztywna struktura)
no to powiedz mi cóż CI można powiedzieć (napisać) jeśli nie jesteś w stanie (nie chcesz) podać ani jednego konkretu odnośnie danych, które mają być zapisane. Zastanó się co masz i co chcesz wyciągać z bazy i postaraj się jak najdokładniej odpowiedzieć na
- co dostajesz z pojedyńczego pomiaru (nie serii)
- ile jest typów pomiarów (za dwa różne typy uznaj pomiary, ktÓre zwracają różne typy danych i/lub różną ilość danych, np, jeden zwraca wartość typu int a drugi typu punkt)
- jak opisana jest pojedyńcza seria pomiarowa (czyli jakie dodatkowe dane oprócz czasu i wartości w nim są jeszcze potrzebne)
- co chcesz wyciągnąć z bazy (całą serię, średnie (min, max itp) z serii, tylko część serii itp
Dodam tylko, że dokładnie to samo musisz rozważyć nawet w przypadku gdybyś chciał dane umieszczać w pliku, a ten przechowywać jako BLOBa