/ / klucz magazynu mysql / magazyn wartości - mysql, baza danych, magazyn kluczy

problem przechowywania klucza / wartości mysql - mysql, database, klucz-wartość-store

Próbuję zaimplementować magazyn kluczy / wartości za pomocą mysql

Mam tabelę użytkowników, która ma 2 kolumny, jedną dla globalnego identyfikatora i jedną dla danych serializowanych.

Problem w tym, że za każdym razemzmiany danych użytkownika, będę musiał pobrać serializowane dane z bazy danych, zmienić dane, a następnie ponownie dokonać ich serializacji i wrzucić z powrotem do bazy danych. Muszę powtórzyć te kroki, nawet jeśli wystąpi bardzo niewielka zmiana w dowolnej danych użytkownika (ponieważ nie ma możliwości zaktualizowania tej komórki w samej bazie danych)

Zasadniczo szukam rozwiązań, które zwykle stosują ludzie w obliczu tego problemu?

Odpowiedzi:

1 dla odpowiedzi № 1

Może powinieneś wstępnie przetworzyć swoje dane JSON i wstawić dane jako odpowiedni wiersz MySQL podzielony na pola.

Ponieważ dane wejściowe to JSON, istnieją różne alternatywy konwersji danych:

Wspomniałeś o wielu drobnych zmianach w twoim przypadku. Gdzie one występują? Czy zdarzają się na liście? Atrybut najwyższego poziomu?

Jeśli aktualizacje występują głównie w elementach listy w części danych JSON, być może każdy element powinien faktycznie być reprezentowany w innej tabeli jako osobne wiersze.

Jeśli aktualizacje występują w atrybucie, reprezentuj go jako pole.

Myślę, że koszt przetwarzania wstępnego nie zaszkodzi w twoim przypadku.


0 dla odpowiedzi nr 2

Gdy jest to problem, ludzie nie używają magazynów kluczy / wartości, projektują znormalizowany schemat relacyjnej bazy danych do przechowywania danych w osobnych kolumnach o pojedynczej wartości, które można aktualizować.


0 dla odpowiedzi № 3

Szczerze mówiąc, twoje rozwiązanie wykorzystuje bazę danych jako gloryfikowany system plików - nie polecałbym tego podejścia do danych aplikacji, które są rdzeniem twojej aplikacji.

Najlepszy sposób na użycie relacyjnej bazy danych w moimOpinia polega na przechowywaniu danych relacyjnych - tabel, kolumn, kluczy podstawowych i obcych, typów danych. Są sytuacje, w których to nie działa - na przykład, jeśli twoje dane są tak naprawdę dokumentem lub gdy struktury danych nie są znane z góry. W takich sytuacjach można rozszerzyć model relacyjny lub przeprowadzić migrację do bazy danych dokumentów lub obiektów.

W twoim przypadku najpierw zobaczę, czy serializowanydane mogą być modelowane jako dane relacyjne i czy potrzebujesz nawet bazy danych. Jeśli tak, przejdź do modelu relacyjnego. Jeśli potrzebujesz bazy danych, ale nie możesz modelować danych jako zbioru relacyjnego, możesz mógłby wybierz model klucz / wartość, w którym wyodrębnisz swójdane zserializowane na poszczególne pary klucz / wartość; oznacza to przynajmniej, że możesz aktualizować / dodawać poszczególne pola danych zamiast modyfikować cały dokument. Klucz / wartość nie jest naturalnym dopasowaniem dla RDBMS, ale może być mniejszym skokiem od twojej obecnej architektury.


0 dla odpowiedzi nr 4

gdy masz magazyn kluczy / wartości, zakładając, żedane serializowane to JSON, działa tylko wtedy, gdy masz memcache wraz z nim, ponieważ nie aktualizujesz bazy danych w locie za każdym razem, ale aktualizujesz memcache, a następnie wpychasz ją do bazy danych w tle. więc na pewno masz aby zaktualizować całą wartość, ale nie pojedyncze pole w danych JSON, takie jak sam adres w bazie danych. Możesz szybko aktualizować i odzyskiwać dane z pamięci memcached. ponieważ w bazie danych nie ma skomplikowanych relacji, szybkie przesyłanie i pobieranie danych z bazy danych do pamięć podręczna.