2012-02-15 20 views
18

Część mojej aplikacji zawiera automatyzację głośności utworów.Najlepszy sposób na przechowywanie tablicy w bazie danych MySQL?

Automatyzacja objętość jest opisana w następującym formacie:

[[0,50],[20,62],[48,92]] 

uważam każdy element w tej tablicy „punkt danych” z pierwszej wartości zawierającego pozycję w piosence i drugą wartość zawierającą objętość w skali od 0-100.

Następnie przyjmuję te wartości i wykonuję funkcję po stronie klienta, aby interpolować te dane za pomocą "wirtualnych" punktów danych w celu utworzenia krzywej Beziera, umożliwiającej płynne przejście objętości w trakcie odtwarzania pliku audio.

Jednak powstała potrzeba, aby umożliwić użytkownikowi zapisanie tej automatyzacji w bazie danych w celu późniejszego jej odzyskania.

Te punkty danych może być nieograniczona (choć w rzeczywistości nigdy nie powinna przekraczać około 40-50 naprawdę większość jest mniej niż 10)

także w jaki sposób należy obsługiwać dane? Czy powinien być zapisany bez zmian, w polu tekstowym? Czy powinienem przetworzyć go w jakiś sposób wcześniej, aby uzyskać optymalne wyniki?

Jaki typ danych byłby najlepszy do użycia w MySQL do przechowywania tablicy?

+0

Jaki jest typ danych, które pracują z wewnątrz aplikacji? Czy to ciąg, tablica, obiekt? Zbieram z "jak jest, w polu tekstowym" oznacza, że ​​reprezentujesz punkty jako strunę wewnętrznie, ale mogę czytać to źle. –

+0

Dlaczego po prostu nie utworzyć wielu pól z typem INT?Na przykład volume_min, volume_max, song_position –

+1

Jeśli nie potrzebujesz perfeorm zapytań wyszukujących wartości w tej tablicy, możesz po prostu użyć pola 'text' i zapisać seryjną wersję tablicy (sposób w jaki ją opublikowałeś tutaj jest w porządku, '[[0,50], [20,62], [48,92]]'). –

Odpowiedz

32

Zdecydowanie nie jest to pole text, ale może być to varchar. Nie polecałbym analizowania wyników i przechowywania ich w poszczególnych kolumnach, chyba że chcesz wykorzystać te dane w sensie bazy danych - statystyki itp.

Jeśli nigdy nie zobaczysz siebie pytającego "Jaka jest średnia wielkość, z której korzystają użytkownicy? ? " następnie nie przejmuj się analizowaniem.

Aby dowiedzieć się, jak przechowywać te dane, zadaj sobie pytanie "W jaki sposób mogę użyć go później?" Jeśli zdobędziesz tablicę i będziesz musiał ją wykorzystać w PHP, możesz użyć funkcji serialize. Jeśli użyjesz wartości w JavaScript, kodowanie JSON będzie prawdopodobnie najlepsze dla ciebie (plus wiele języków wie jak to rozszyfrować)

Powodzenia!

+1

Doskonała odpowiedź Mikhail dziękuję. Obejmuje wszystkie punkty, o które chodziło. – gordyr

+1

@Mikhail +1 w porządku, ale dlaczego _Dokładnie nie jest 'tekstem' pole_? –

+1

"Tekst" jest przeznaczony do przechowywania rzeczywistego tekstu - jak opowieść lub wiersz. Nie jest przeznaczony do przechowywania ciągu znaków. W MySQL zapisuje tekst w pliku, a nie "liść drzewa". wszystko w tym jest wolniejsze, wyszukiwanie, indeksowanie, buforowanie. – Mikhail

2

Jeśli prędkość jest najważniejsza podczas pobierania wierszy, należy utworzyć nową tabelę i uczynić ją dedykowaną do przechowywania indeksów tablicy. Użyj typu danych liczby całkowitej i każdy wiersz reprezentuje indeks tablicy. Będziesz musiał utworzyć kolejną kolumnę numeryczną, która połączy je ze sobą, dzięki czemu możesz ponownie złożyć tablicę za pomocą zapytania SQL.

W ten sposób pomożesz MySQL przyspieszyć dostęp. Jeśli potrzebujesz tylko niektórych części tablicy, wystarczy zmienić zakres w zapytaniu SQL i możesz ponownie złożyć tablicę, jak tylko chcesz.

2

Proponuję zapoznać się z typem danych JSON. W ten sposób możesz przechowywać tablicę w bardziej efektywny sposób niż tekst lub varchar, a możesz uzyskać dostęp do swoich danych bezpośrednio z MySQL bez konieczności analizowania całej zawartości.

Spójrz na ten link: https://dev.mysql.com/doc/refman/5.7/en/json.html

Powiązane problemy