Aktywne Wpisy
Zaczytanaa +460
smutny_login +165
To uczucie gdy trafiła się jakaś para na #badoo, i było pisanie do czasu aż nie napisałem że leczę krowy - para usunięta
Aż mi się przypomina speed dating na którym byłem i te reakcje na informację o tym co robię - bo one myślały że weterynarz to tylko od psów i kotów, one myślały że krów się w ogóle nie leczy
#przegryw #depresja #logikarozowychpaskow #logikaniebieskichpaskow #tinder #podrywajzwykopem
Aż mi się przypomina speed dating na którym byłem i te reakcje na informację o tym co robię - bo one myślały że weterynarz to tylko od psów i kotów, one myślały że krów się w ogóle nie leczy
#przegryw #depresja #logikarozowychpaskow #logikaniebieskichpaskow #tinder #podrywajzwykopem
Mam problem koncepcyjny. Pracuję nad projektem w którym wymagany jest wpółbieżny dostęp do zasobów przez różnych użytkowników. Całość oparta o Spring Boot, mongoDB, angular.
W skrócie:
Użytkownicy mają listę dokumentów które mogą edytować niezależnie od siebie. Jeżeli jeden użytkownik edytuje tylko jeden dokument wszystko jest ok. Problem powstaje kiedy 2 lub więcej użytkowników będzie chciało edytować ten sam dokument.
Klient chce takie rozwiązanie:
- dać możliwość edycji pierwszemu, resztę poinformować aby czekała aż tamten skończy.
I tutaj leży mój problem, w jaki sposób przechowywać informację o tym, że jakiś użytkownik zaczął edycję dokumentu.
Mogę:
- przy rozpoczęciu edycji przez pierwszego użytkownika wysłać info do innych, że ten dokument jest edytowany (informacja trzymana po stronie klienta )
- trzymać informację przy każdym dokumencie w bazie (np. dodać pole isInEditMode) ale może dojść do sytuacji kiedy użytkownik przestanie edytować dokument a pole w bazie się nie zmieni (np. wyłączy kompa)
- trzymać w pamięci po stronie serwera listę dokumentów które są aktualnie edytowane ( przy dużej liczbie użytkowników może być problem)
Jako kanał synchronizacji wykorzystałem websockety, wiec tutaj nie ma problemu, angular i spring się świetnie dogadują.
Jeżeli ktoś z was pracował nad podobnym problemem prosiłbym o jakieś wskazówki, ewentualnie o jakieś dobre źródła z których mogę się doszkolić.
#programowanie #java #pytanie #spring
@t12t12: Jakie problemy? To rozwiązanie brzmi najlepiej.
@t12t12: ta opcja ma chyba tą samą wadę co opcja druga.
Opcja pierwsza też średnia, bo co jeśli jakiś użytkownik zaloguje się do systemu po rozpoczęciu edycji danego dokumentu przez użytkownika?
Ja bym w bazie trzymał informację o tym, że dokument jest edytowany, ale nie w formie boolean tylko timestampa.
@sosna119: z tym timestampem to jest całkiem niezły pomysł, tyle że sesje musiały by być mega długie ( edycja może trwać parędziesiąt minut )
Aplikacja, która uzyskała dostęp i edytuje wysyła co X czasu "hearbeat", że jeszcze edytuje.
Serwer, kiedy przychodzi rządanie o edycję, przyznaje dostęp jeśli dokument nie jest edytowany (info w bazie, że nie jest), lub hearbeat nie przyszedł w odpowiednim czasie (np. 3x heartbeat).
Hearbeat może być ustawiony na 1 minutę, 10
Dodatkowo możesz przy braku aktywności ze strony użytkownika pokazać dajmy na to po 15 minutach komunikat, że jak w ciągu 60 sekund nie naciśnie przycisku, że chce dalej edytować dokument to wyłączysz mu edycje tego dokumentu.
@stash: Nieprawda to jest :) Aplikacje webowe nie powinny opierać się na stabilności łącza. Przecież możesz z tego korzystać w telefonie albo w pociągu na słabym połączeniu. Zanik może być tymczasowy i do tego czasu aplikacja powinna przechowywać dane lokalnie, żeby wysłać je do serwera jak już
Komentarz usunięty przez autora