Skocz do zawartości

Limit bazy - możliwe rozwiązania

Polecane posty

Ograniczenie wielkości bazy dla SQL Server Express (wersja darmowa) na dzień dzisiejszy wynosi 10GB.

Chciałbym żeby osoby zainteresowane zgłaszały w tym wątku propozycje rozwiązań tego problemu.

Sytuacja niestety jest bardzo poważna i wielu użytkowników dotyka to ograniczenie.

 

Aktualne propozycje rozwiązań (o których wspominał już Bartek):

1) przechowywanie zdjęć poza bazą

2) przechowywanie opisów poza bazą (chociaż to nie było w 100% potwierdzone)

 

Z tego co udało mi się ustalić największy problem dotyczy zdjęć oraz wiadomości e-mail i tak jest w naszym przypadku.

ad 1) W przypadku przechowywania zdjęć poza bazą jestem ciekaw na jakiej zasadzie miałoby to działać. Zdjęcia byłyby ładowane wyłącznie przy podglądzie (dwukliku) wybranej aukcji oraz przy powielaniu itp.? Jeżeli byłyby wczytywane wszystkie w danym widoku, to na pewno wpłynęłoby mocno na wydajność.

ad 2) Przechowywanie opisów poza bazą nie jest według mnie najlepszym rozwiązaniem. Tym bardziej, że opisy nie są głównym winowajcą braku miejsca.

Obecnie Sello nie najlepiej w mojej ocenie radzi sobie ze zdjęciami, ponieważ w tabeli im__Image przechowywane są wielokrotnie zdublowane zdjęcia. Jeżeli mamy 2 aukcje trwające oraz 10 zakończonych które wykorzystują takie same zdjęcia, to będziemy ich mieć zdublowanych 12. Dlaczego w bazie nie jest przechowywane 1 zdjęcie i przypisane do wszystkich 12 aukcji? :) 

Ciekawe jest to, że faktycznie sumy wartości im_CheckSum (MD5) nie zgadzają się dla takich samych zdjęć. Różnica występuje w nagłówku dla takich samych obrazów im_Image (nie wiem czy Sello w jakiś sposób nie dokonuje modyfikacji). W każdym razie przez to prawdopodobnie są te duble - bo MD5 tworzony jest z całości.

Gdyby wprowadzić takie rozwiązanie, aby zlikwidować wyłącznie duble, to w naszym przypadku pozwoliłoby to ograniczyć miejsce zajmowane przez bazę o przynajmniej o 50% (chociaż raczej bliżej 80%).

 

Link to postu

1. Rozwiązanie oparte o FileStream aktualnie testujemy - jest to mechanizm SQLowy, który umożliwia trzymanie danych na dysku we wskazanym folderze. Z punktu widzenia klienta SQL jest to zupełnie przezroczyste. Serwer sam zarządza tymi danymi.

2. Opisy aukcji kiedyś były bardziej zasobożerne, gdyż co 30 dni pojawiała się kopia wraz z każdą kopią aukcji. Obecnie, gdzie aukcje są do wyczerpania to tych opisów powinno być relatywnie mało. Oczywiście w starszych bazach są te poprzednie opisy, ale to można usunąć korzystając ze skryptów czyszczących opisy.

1 godzinę temu, Jakub *** napisał:

ponieważ w tabeli im__Image przechowywane są wielokrotnie zdublowane zdjęcia

Nie, Sello jedno i to samo zdjęcie przechowuje w bazie tylko raz. Jest ono wielokrotnie przypisane do różnych towarów czy aukcji. Jeśli zdarzają się duble to prawdopodobnie mają one inny rozmiar lub w jeszcze inny sposób są modyfikowane przez serwis aukcyjny - więc są inne z punktu widzenia programu.

Można również spróbować usunąć zdjęcia, które nie są przypisane do niczego. Przykładowo wystawienie aukcji ze zdjęciem A1 z towaru i pobranie pełnych danych z Allegro spowoduje, że do towaru będzie przypisane zdjęcie A1, zaś do aukcji przypisze się nowe zdjęcie A2 (z tym zmienionym nagłówkiem). Można spróbować takie zdjęcia przepiąć w towarach na A2 a następnie usunąć A1 (te które nie są już powiązane z niczym).

 

Link to postu
11 minut temu, Bartosz Rosa napisał:

Nie, Sello jedno i to samo zdjęcie przechowuje w bazie tylko raz. Jest ono wielokrotnie przypisane do różnych towarów czy aukcji. Jeśli zdarzają się duble to prawdopodobnie mają one inny rozmiar lub w jeszcze inny sposób są modyfikowane przez serwis aukcyjny - więc są inne z punktu widzenia programu.

Czyli sprawa się wyjaśniła, duble są związane z modyfikacjami wprowadzonymi przez serwis aukcyjny.

 

12 minut temu, Bartosz Rosa napisał:

Można również spróbować usunąć zdjęcia, które nie są przypisane do niczego. Przykładowo wystawienie aukcji ze zdjęciem A1 z towaru i pobranie pełnych danych z Allegro spowoduje, że do towaru będzie przypisane zdjęcie A1, zaś do aukcji przypisze się nowe zdjęcie A2 (z tym zmienionym nagłówkiem). Można spróbować takie zdjęcia przepiąć w towarach na A2 a następnie usunąć A1 (te które nie są już powiązane z niczym).

Rozumiem Bartek o co Ci chodzi, w najlepszym wypadku pozwoliłoby to na ograniczenie ilości miejsca zajmowanego przez zdjęcia o 50%.

Natomiast problem pojawia się dopiero dla ofert trwających na określony czas (nie do wyczerpania przedmiotów). Wtedy konieczne by było "przepinanie" takiego zdjęcia praktycznie przy każdym wznawianiu takich ofert. Niestety mamy część takich ofert, które są właśnie na określony czas.

 

26 minut temu, Bartosz Rosa napisał:

1. Rozwiązanie oparte o FileStream aktualnie testujemy - jest to mechanizm SQLowy, który umożliwia trzymanie danych na dysku we wskazanym folderze. Z punktu widzenia klienta SQL jest to zupełnie przezroczyste. Serwer sam zarządza tymi danymi.

A na jakim etapie są testy? Nie ukrywam, że czekamy z niecierpliwością na wersję Sello z tym rozwiązaniem :)

Link to postu
24 minuty temu, Jakub *** napisał:

Niestety mamy część takich ofert, które są właśnie na określony czas.

To można (jeśli można) nie pobierać pełnych danych, wtedy Sello będzie posiadało tylko te zdjęcia oryginalne. Ewentualnie stworzyć skrypt uruchamiany co miesiąc, który będzie robił całą robotę z przepinaniem zdjęć.

24 minuty temu, Jakub *** napisał:

A na jakim etapie są testy? Nie ukrywam, że czekamy z niecierpliwością na wersję Sello z tym rozwiązaniem :)

W zasadzie, to nie będzie prawdopodobnie dedykowanej wersji z tym rozwiązaniem, bo tak naprawdę taką zmianę można (i nawet trzeba) zrobić we własnym zakresie. To jest bardziej domena serwera SQL niż Sello, zatem odpowiednią procedurę opublikujemy jak upewnimy się, że nie ma z nią problemów. Niestety już wiemy, że będą problemy przy konwersji bazy więc musimy to jeszcze dokładniej zbadać. Sama procedura nie jest trudna, ogranicza się do "pstryknięcia" kilku przycisków w serwerze SQL oraz wykonania odpowiedniego skryptu SQL dla bazy Sello.

Drugi minus jest taki, że aby przełączyć się na FileStream trzeba wykonać kopię zdjęć. Zatem jest problem w przypadku gdy w bazie nie ma wolnego miejsca na tę kopię. Ale to postaramy się rozwiązać poprzez bazę tymczasową, do której zdjęcia zostaną skopiowane.

Dobrze by było również podesłać rozwiązanie do kilku z Was, zanim stanie się publiczne w celu sprawdzenia na danych produkcyjnych. Z racji dodatkowych ewentualnych problemów i konieczności wykonywania operacji na serwerze SQL raczej mamy na myśli zaawansowanych użytkowników, którzy swobodnie* czują się wykonując polecenia SQL na bazie :) . Chętni mogą się zgłaszać do mnie w jakikolwiek sposób. Nie gwarantuję, że dostaną wszyscy - zależy ile będzie zgłoszeń itd. Instrukcję podeślemy jak rozwiążemy znane nam problemy.

* swobodnie, ale ze świadomością zagrożeń :).

Link to postu
24 minuty temu, Bartosz Rosa napisał:

Chętni mogą się zgłaszać do mnie w jakikolwiek sposób. Nie gwarantuję, że dostaną wszyscy - zależy ile będzie zgłoszeń itd. Instrukcję podeślemy jak rozwiążemy znane nam problemy.

My zgłaszamy swoją gotowość do testów - bylibyśmy chętni.

 

26 minut temu, Bartosz Rosa napisał:

W zasadzie, to nie będzie prawdopodobnie dedykowanej wersji z tym rozwiązaniem, bo tak naprawdę taką zmianę można (i nawet trzeba) zrobić we własnym zakresie.

Szkoda, że nie będzie oficjalnego wsparcia, ale:

- nie będzie prawdopodobnie ;) (więc może kiedyś będzie)

- mam nadzieję, że przy wsparciu społeczności wszyscy dadzą radę uruchomić taką funkcjonalność w razie potrzeby

Dzięki Bartek, że zajmujecie się tą kwestią, chociaż tak naprawdę nie musieliście.

Link to postu

Musimy, raz, że tak jest lepiej dla Was,  dwa, że znikną problemy związane z limitami, a na pewno będą mniej problematyczne :).

Rozwiązanie z filestreamem będzie normalnie przez nas wpierane, w zasadzie to moja robocza baza danych śmiga na filestreamie od dwóch tygodni. Teraz mechanizm jest testowany i normalnie będzie włączony do normalnych testów. Dobre nowiny są takie, że jednak problem z wypełnionymi bazami nie jest taki straszny, konwersja bazy również działa. Jednak jeszcze trochę eksperymentów do wykonania pozostało, oraz możliwość powrócenia do poprzedniego rozwiązania (na wszelki wypadek).

Link to postu

Cieszę się, że wszystko na razie przebiega bez większych problemów. :)

Mam jeszcze jedno pytanie.

Czy przy wystawianiu / powielaniu aukcji, Sello korzysta już z nowego, czy jeszcze starego API?

Wydaje mi się, że dla nowego API jest taka możliwość, że w przypadku powielania aukcji zakończonej / trwającej, linki do zdjęć mogą być nadal aktualne i można by je wykorzystać podczas wystawiania oferty. Wysyłając sam link z treścią oferty, bez wcześniejszego wysyłania zdjęć. Ze strony Sello konieczne by było sprawdzenie wyłącznie poprawności takiego linku przed jego akceptacją do ponownego użycia.

To również powinno w jakimś stopniu ograniczyć niechciane modyfikacje zdjęć przez serwis.

Link to postu

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.

Użytkownik forum
Odpowiedz...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...