Mam pewną zagwozdkę: chcę aby niektóre atrybuty obiektu były zapisywane w bazie w postaci zaszyfrowanej, a przy odczycie deszyfrowane.
Nie za bardzo mam pomysł jak to efektywnie rozwiązać. Najbliższe memu ideałowi rozwiązanie to gem attr_encrypted (https://github.com/shuber/attr_encrypted), ale jest tak wolne, że dzięki…
Myślałem, o użyciu AES_ENCRYPT i AES_DECRYPT z MySQL’a, ale wyzwalanych z poziomu aplikacji, a nie za pomocą triggerów, czy procedur składowanych (ze względów bezpieczeństwa).
Nie za bardzo mam pomysł jak to ugryźć, więc byłbym wdzięczny za jakieś wskazówki, pomysły, etc.
Jestem w stanie się zgodzić na: “To, że coś jest 10x wolniejsze, nie znaczy, że nie jest wydajne”. Rozumiem Twoje intencje. Byłbym wdzięczny jakbyś rozwinął swoje przemyślenia.
Od początku zakładałem, że czas to nie jedyny istotny czynnik, ale w tym przypadku ma dla mnie duży priorytet.
Pozwolisz na mały, praktyczny przykład. Moja droga do pracy wygląda tak:
idę do przystanku 3min
czekam około 2-4 min na tramwaj
jadę tramwajem 25 min
idę z przystanku do pracy 30s
Całość zajmuje jak widać niewiele ponad 30min (no chyba, że jakieś nieprzewidywane korki czy coś). Czy w takiej sytuacji byłby sens kupować magiczne buty (zapewne bardzo drogie :)), dzięki którym chodziłbym 10x szybciej? Oczywiście, że nie. Lepiej byłoby jeździć szybszym tramwajem. Podobnie może być w kwestii o której piszesz w topicku. Nieważne jest czy te szyfrowane accessory będą 10, 100 czy 1000 razy wolniejsze od zwykłych. Ważne jest to ile razy w 1 żądaniu będziesz je wywoływać i jaką część procesora zajmą. Oczywiście mogłoby się tak zdarzyć iż faktycznie będzie miało to dla Ciebie znaczenie, ale musisz to po prostu zmierzyć. Samo x razy wolniejsze po prostu nic nie znaczy (tutaj mi się tylko przypominają mega lamerskie, typowe dla phpa, rady w stylu “stosuj echo zamias print bo 1 000 000 wywołań tego pierwszego zajmuje 1s a tego drugiego 2s”).
Nie, czas w milisekundach zależy od ilości danych (elementów) na których algorytm operuje. A w jakiej “linii” rośnie czas w funkcji ilości elementów to już zależy od owego algorytmu złożoności obliczeniowej. Mogę Ci podrzucić literaturę na ten temat jak nie wierzysz
@radarek - zgodzę się z Tobą, ale jeśli ta operacja staje jest tramwajem i mam do wyboru linię, która jedzie 10 minut i taką, która jedzie 25 minut, to wybieram tę pierwszą.
Fidel, po prostu przeczołgaj profilerem swoją aplikację i zobacz jakie to ma znaczenie. Jeśli dekodowanie zajmuje 2-5% całkowitego czasu przetwarzania żądania, to optymalizacja tego po prostu się nie opłaca.