mORMot – sugestie dotyczące wydajności i stabilności wybranego rozwiązania

0

Witam
muszę sprawdzić działanie "Synopse mORMot framework"

Założenia są takie, że serwer ma udostępiniać dane z MSSQL-a oraz przyjmować jakieś "update" lub "inserty"
Klientów będzie kilkunastu. W jakiś tam odstępach danych będą pobierać dane i wysyłać dane. Klienci działają na firebird i bazy będą raczej małe. Ale muszą przyjąć zwłaszcza na starcie ok 20-30tys rekordów a następnie tylko zmiany. Klient wysyła ok 3000 rekordów w ciągu 24 godzin.

Niby zrobiłem prosty serwer. Klient też działa. Ale ponieważ do tej pory nie miałem potrzeby w ten sposób rozwiązywać "problemów" to nie bardzo wiem na co zwrócić uwagę, żeby to się nie wywalało i działało sprawnie.
Po stronie serwera mam :

Props := TOleDBMSSQLConnectionProperties.Create('serwer','BAZATESTOWA','sa','haslo');
HttpServer := TSQLDBServerHttpApi.Create(Props,'remote','8092','user','pass');

Czy da się tu podpiąć jakieś zdarzenia, dajace info o ilości połaczeń, ewentualnych błedach ??

Klient jest np taki (select jest mało wydajny ;) ale to testy ):

var  _Props: TSQLDBConnectionProperties;
     ds :TSynDBSQLDataSet;
begin
  _Props := TSQLDBWinHTTPConnectionProperties.Create('192.168.1.11:8092','remote','user','pass');
  ds := TSynDBSQLDataSet.Create(self);
  ds.Connection:=_Props;
  ds.CommandText:='Select * from CDN.KntKarty';
  ds.Open;
  DataSource1.DataSet:=ds;
end;

no i działa, wyświetla dane w tym przypadku. Tu podobne pytanie do poprzedniego. Gdzie mogą wystąpić problemy ??

Może szybciej będzie zamiast TSynDBSQLDataSet przenieśc to do JSON-a i jego obrabiać ??
Jak widać trochę "kulawo" mi to idzie, więc proszę o jakieś wskazówki jak to zrobić dobrze czyli wydajnie i żeby się nie wywalało.

Z góry dziękuję za pomoc :):)

0
_JarekZ napisał(a):

Witam
muszę sprawdzić działanie "Synopse mORMot framework"

No to się zacznie... ;-)
IMO to nie jest odpowiednie forum do takich pytań.
Ale to będzie:
https://synopse.info/forum/viewforum.php?id=2

Założenia są takie, że serwer ma udostępiniać dane z MSSQL-a oraz przyjmować jakieś "update" lub "inserty"

Serwer ma robić na bridge do zapytań SQL (15 minut roboty, i jak widzę to dokładnie zrobiłeś) czy ma być serwerem aplikacyjnym (temat rzeka), czy też ma serwować micor-servieces?
Jakieś updajty i inserty to baza danych, a nie robota dla serwera SOA.
Także proszę Cię, określ co ten serwer ma robić.
Jakiś skrawek modelu dziedziny by się zdał...

Klientów będzie kilkunastu. W jakiś tam odstępach danych będą pobierać dane i wysyłać dane. Klienci działają na firebird i bazy będą raczej małe. Ale muszą przyjąć zwłaszcza na starcie ok 20-30tys rekordów a następnie tylko zmiany. Klient wysyła ok 3000 rekordów w ciągu 24 godzin.

To ma być jakaś taka replikacja danych?
Ty się zastanów czy nie zrobić tego w oparciu o MoM (message oriented middleware).
Stawiasz jakiegoś np. RabbitMQ do tego trochę logiki i działa.

W mORMot też się da, a jakże. Ale typowego MoM tam nie ma.

Niby zrobiłem prosty serwer. Klient też działa. Ale ponieważ do tej pory nie miałem potrzeby w ten sposób rozwiązywać "problemów" to nie bardzo wiem na co zwrócić uwagę, żeby to się nie wywalało i działało sprawnie.
Po stronie serwera mam :

Props := TOleDBMSSQLConnectionProperties.Create('serwer','BAZATESTOWA','sa','haslo');
HttpServer := TSQLDBServerHttpApi.Create(Props,'remote','8092','user','pass');

Czy da się tu podpiąć jakieś zdarzenia, dajace info o ilości połaczeń, ewentualnych błedach ??

Błędy bazodanowe możesz obsłużyć na poziomie TOleDBMSSQLConnectionProperties
Ilość połączeń zależy od puli, którą ustawiasz w konstruktorze - domyślnie 1.

Klient jest np taki (select jest mało wydajny ;) ale to testy ):

var  _Props: TSQLDBConnectionProperties;
     ds :TSynDBSQLDataSet;
begin
  _Props := TSQLDBWinHTTPConnectionProperties.Create('192.168.1.11:8092','remote','user','pass');
  ds := TSynDBSQLDataSet.Create(self);
  ds.Connection:=_Props;
  ds.CommandText:='Select * from CDN.KntKarty';

Bleh... Comarch.ERP XL :/

ds.Open;
DataSource1.DataSet:=ds;
end;

no i działa, wyświetla dane w tym przypadku. Tu podobne pytanie do poprzedniego. Gdzie mogą wystąpić problemy ??

Aaa... Ty nie zrobiłeś serwera SOA.
Ty zrobiłeś bridge do bazy danych over HTTP.
To fajne jest, ale... nie wiem czy naprawdę o to ci chodziło.

Może szybciej będzie zamiast TSynDBSQLDataSet przenieśc to do JSON-a i jego obrabiać ??
Jak widać trochę "kulawo" mi to idzie, więc proszę o jakieś wskazówki jak to zrobić dobrze czyli wydajnie i żeby się nie wywalało.

To przyłóż się i opisz co chcesz osiągnąć.

0

a co się ma zacząć ??? chyba po to jest forum, żeby się coś dowiedzieć. :):)

Generalnie sprawa ma się tak:

  • obecnie działa to tak, że każda z tych placówek to prawie osobny podmiot i jakoś sztucznie między sobą wysyłają dane o sprzedaży i towarach.

A ma być tak:

  • jest serwer z główną bazą danych, gdzie wprowadzją sobie dokumenty, kontrahentów, towary itd. (tak jest to comarch ;);))
  • jest n-sklepów, które mają tzw POS-y do sprzedaży detalicznej (na kazdym POS-ie ma być baza tylko z towarami i sprzedażą).

Po "nowemu" n-sklepów będzie pobierać nowe towary lub zmiany w towarach (np. cena, podatek itp) a wysyłać do serwera dane o sprzedaży (paragony)

poza tym na każdym z tych n-sklepów są jakieś urządzenia typu waga etykietująca, sprawdzarka cen itd. Urządzenia też są "zasilane" z obecnych baz a będą chyba musiały być z bazy głównej.

Taki bridge do tego serwera większość problemów załatwi chyba, tylko nie wiem jak to wydajnościowo będzie - pytanie bardziej o mORmot-a czy to pozwoli na szybką i stabilną pracę. Tak jak pisałem wcześniej sporo danych będzie wymienianych przy rozruchu całości. Potem rozłoży się to w ciągu dnia.

Czyli odpowiadając na pytanie chce osiągnąć stabilną pracę przy wyżej opisanej wymianie danych ;);)

0
_JarekZ napisał(a):

/ciach/

  • jest serwer z główną bazą danych, gdzie wprowadzją sobie dokumenty, kontrahentów, towary itd. (tak jest to comarch ;);))
  • jest n-sklepów, które mają tzw POS-y do sprzedaży detalicznej (na kazdym POS-ie ma być baza tylko z towarami i sprzedażą).

Po "nowemu" n-sklepów będzie pobierać nowe towary lub zmiany w towarach (np. cena, podatek itp) a wysyłać do serwera dane o sprzedaży (paragony)

poza tym na każdym z tych n-sklepów są jakieś urządzenia typu waga etykietująca, sprawdzarka cen itd. Urządzenia też są "zasilane" z obecnych baz a będą chyba musiały być z bazy głównej.

Taki bridge do tego serwera większość problemów załatwi chyba,

Imo dokładnie odwrotnie.
Taki bridge do tego serwera bazy danych zapewnia Ci bezproblemową i szybką komunikację z bazą danych.
To tak jakbyś miał dostępny w internecie serwer bazy danych, tylko tu komunikacja jest oparta na HTTP, może być szyfrowana i kompresowana, itd.
I tylko tyle i aż tyle załatwi.
O wymianę danych, obsługę błędów replikacji, pracę w trybie off-line i pewnie jeszcze ze 100 innych rzeczy musisz zadbać sam.

tylko nie wiem jak to wydajnościowo będzie - pytanie bardziej o mORmot-a czy to pozwoli na szybką i stabilną pracę.

O to bym się akurat najmniej martwił. mORMot jet bardzo szybki, stabilny i zadowala się jakimiś śmiesznymi zasobami w porównaniu do Java/.NET

Tak jak pisałem wcześniej sporo danych będzie wymienianych przy rozruchu całości. Potem rozłoży się to w ciągu dnia.

W takim układzie jak napisałeś to i tak większość obciążenia weźmie na siebie baza danych na serwerze.

Czyli odpowiadając na pytanie chce osiągnąć stabilną pracę przy wyżej opisanej wymianie danych ;);)

Moim zdaniem to nie jest dobre rozwiązanie do tego problemu, ale oczywiście będzie działać.
Patrzę na ten kod i mam mieszane uczucia z tymi DataSetami i czystym SQLem...
Ja bym tak tego raczej nie robił...

0

ale ale jakie rozwiązanie ??????
toż to przecież jakiś przykład i tyle
nie znam moRMOt-a i chciałem się dowiedzieć czy to "wydoli". Zrobiłem prosty przykład i działa. Nie oceniaj tego jako rozwiązania docelowego.
Masz rację, że baza bierze na siebie dużo i dlatego ma być "konkretny" serwer.

0

Powtarzam Jeszce raz, używając Twojej maniery;
mORMot jest wydajny!!!!!!
mORMot jest stabilny!!!!!!
mORMot ma szybki i wysokiej klasy wsparcie!!!!!! (i nie myślę tu Broń Boże o sobie)

Mam nadzieję że użyłeś googla i trafiłeś na to:
https://robertocschneiders.wordpress.com/2012/11/22/datasnap-analysis-based-on-speed-stability-tests/

A co do przykładu...
Ja pierniczę; Czego nie rozumiesz, że:

  1. ten Twój przykład prezentuje dostęp do baza danych przez HTTP.
  2. A to zapewnia komunikację klienta z bazą danych - I NIC WIĘCEJ!!!!!!!
  3. Dlaczego nie chcesz zrobić tego serwera jako SOA (Wiesz w ogóle czym jest SOA)?
  4. Poza tym replikacja jest wbudowana w warstwę ORM mORMota, ale to Cię raczej przerasta, a więc lepiej to zostawić.http://blog.synopse.info/post/2015/03/31/ORM-Master/Slave-Replication

A w ogóle Ty wiesz co i jak dokładnie chcesz zrobić?
Załóżmy, że nie ma mormota.
Masz dostęp do czegokolwiek co zapewnia komunikację.
Jak to chcesz zrobić?
Zadawać zapytania SQL i przerzucać dane przez DataSet?

Zaczyna coś świtać, bo mam wrażenie, że jak grochem o ścianę...

0

gościu idź się leczyć
o co Ci chodzi ?
chcesz kogoś opierniczyć czy masz zły dzień ??
napisałeś poprzednim razem, że jest wydajny, dzięki za pomoc ale wystarczy po co te wypociny ??
nawet w pół zdanie nie napisałem, że się z Tobą nie zgadzam.
masz problem z czytaniem ???
to że może cos więcej wiesz nie oznacza, że masz prawo kogoś równać z ziemią.
są tacy lekarze od głowy, może nie jest za późno.

1
_JarekZ napisał(a):

gościu idź się leczyć

I pomóż tu komuś bezinteresowanie, to ci podziękuje...

o co Ci chodzi ?
chcesz kogoś opierniczyć czy masz zły dzień ??
napisałeś poprzednim razem, że jest wydajny, dzięki za pomoc ale wystarczy po co te wypociny ??

Rób jak chcesz, twój cyrk, twoje małpy.

nawet w pół zdanie nie napisałem, że się z Tobą nie zgadzam.
masz problem z czytaniem ???

Raczej nie mam problemów z czytaniem.
Jednakże żal, że nie zrozumiałeś i nie odniosłeś do tego co napisałem.
A wydawało mi się, że jak ktoś chce lub musi napisać serwer to wie co i jak o podstawach.
Doczytał, zrobił rozpoznanie, wie czym jest SOA itd. czy replikacja ma być jedno czy dwukierunkowa, czy ma być reaktywna czy pasywna, jak radzić sobie z obsługą błędów replikacji, pracą off-line, itd.

Chciałem podyskutować, rozważyć różne rozwiązania, różne za i przeciw.
Może czegoś dowiedzieć, a może coś podpowiedzieć...
Przepraszam, myliłem się - moja wina.

to że może cos więcej wiesz nie oznacza, że masz prawo kogoś równać z ziemią.
są tacy lekarze od głowy, może nie jest za późno.

Ooo...
Zapewniam cię, że do równania z ziemią do ci jeszcze daleko.
Ale jesteś na dobrej drodze, gościu.
Zapamiętam.

0

w takim razie mamy odmienne zrozumienie dyskusji.
Metoda "najechania" na kogoś u mnie działa troche inaczej niż "zaproszenie" do dyskusji.
mimo wszystko pozdrawiam i raz jeszcze dzięki za "fajne" przekazanie informacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1