MySQL si campuri mai destepte

Sunt foarte atasat de MySQL (experienta, incredere,etc) insa sunt momente cand nu prea stiu cum sa il fac mai destept.

De exemplu sunt momente in care am nevoie de campuri care pot primi liste, gen: department_ids: (12,232) sau name:{ "first"=>"Cata","last":"Money"} pe care sa poti face si cautari. Ce solutii aveti (in afara de a folosi un Posgresql sau ceva din suitele NoSQl)

Ai putea sa faci un tabel MyISAM cu o coloana text cu index “full text” (unde sa faci o agregare toate valorile pe care le-ai stocat serializat in tabela originala, eventual cu un prefix pentru a le identifica mai tarziu) si o coloana cu id-ul row-ului corespunzator (tot din tabela originala).

Dupa care sa faci un full text search pe coloana agregata dupa termenii cautati ca sa aflii id-urile row-urilor cu care poti face join … sau alt select.

1 Like

http://www.blastar.biz/2013/11/28/how-to-use-mysql-to-search-in-php-serialized-fields/

Personal, nu consider o idee buna. SQL sunt baze de date relationale si pt asta sunt optimizate. Prin serializare sau json_array nu faci altceva decat sa tii un tabel intr-un tabel.
E ok pt chestii ce nu tin de DB, gen UI settings sau mai stiu eu ce

Solutii, fa tabele separate, fa views sunt mai rapide.
ia un redis, un memcache tine chestiile alea in ram

Daca ai nevoie sa faci operatii sql pe camputi serializate, nu prea e conceputa baza de date cum trebuie. imho

3 Likes

E cam ca si cum ai pune unzip.exe in backup.zip

Stiu, si e pacat ca MySQL nu a reusit sa faca ceva in privinta asta.

re-read partea cu “relational”.
serializarea se foloseste pt salvarea unui obiect.
json cum ii zice numele, javascript Object notation, lafel
Astea le folosesti doar daca ai nevoie sa salvezi starea unu obiect ce va fi folosit intr-un limbaj object-orientated.

Vezi daca nu te ajuta tipurile de date ENUM si SET ale MySQL:
https://dev.mysql.com/doc/refman/5.0/en/enum.html

Nu serializezi, faci tabela separata. Mult mai practic, usor de lucrat cu, scalabil.

Eu una as merge pe tabel json, pentru ca mai nou MySQL suporta chestia asta. Doar pentru acel tip de date. Daca faci si indecsi virtuali, poti chiar sa cauti inauntrul acelui json. Pentru mine a fost mana cereasca la un moment dat.

Stiu ca nu e pentru toata lumea solutia sta, dar eu cred ca merita avuta in vedere.

marian moment: DROP mysql use potsgres with HStore or JSON(B) datatypes => profit.

1 Like

I know :frowning:

1 Like