NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Michael Laki
Člen
Avatar
Michael Laki:19.12.2017 12:15

Dobrý den,
rád bych se zeptal jakým způsobem bych měl navrhnout databázi, aby byla rychlá a nezatěžovala paměť.

Bude se jednat o aplikaci psané v asp.net a přístup k databázi bude pomocí EntityFrameworku.
Databáze bude shromažďovat data o poloze různých zařízeních která budou posílat data pomocí tcp protokolu na server a ten bude ukládat data do databáze.

Zařízení bude řádově tisíce a každé zařízení odešle cca 2000 - 4000 krát svou polohu denně.

pozn. mimo polohu bude zařízení odesílat i své imei, timestamp, crc, rychlost, číslo simkarty a v dosti případech až
data z dvanácti senzorů.

Má otázka tedy zní jak navrhnout tabulky případně primární a cizí klíče aby se docílilo co největší efektivity v případě kdy se budu dotazovat na data a vyhledávat například podle času nebo identifikátoru zařízení.

Všem moc děkuji.

 
Odpovědět
19.12.2017 12:15
Avatar
Ondřej Crha
Člen
Avatar
Odpovídá na Michael Laki
Ondřej Crha:25.1.2018 11:09

Ahoj,
nikdo se neozval, tak píšu já. Když jsme navrhovali monitoring počítačů, řešili jsme obdobný problém (stanice odesílaly aktuálně spuštěné aplikace, seznam instalovaných programů a aktualizací, aktivitu/neaktivitu uživatele apod.).
Návrh databáze je ta snazší věc. Bez struktury dat je to jen hádání, ale vedl bych to cca tak, jak přikládám v obrázku. Sloupce jsou samozřejmě na tobě, ale určitě bych vedl zvlášť info o poloze a zvlášť výstup senzorů.
Indexy minimálně na cizích klíčích, popř. na sloupcích, podle kterých hodláš vyhledávat a grupovat (JournalDateTime).
Na co bych se spíš zaměřil, je způsob, jakým data ukládat. Píšeš, že se jedná o tisíce zařízení, každé posílá údaje co pár vteřin? Kdyby se pro každý záznam dělal insert zvlášť, tak máš brzo zaděláno na problém. Být tebou, zaměřím se hlavně na tohle. Správný přístup by dle mého měl spočívat v kolektoru, ať už v samotném zařízení, nebo na straně serveru, který bude data přijímat. Ten by insertoval v dávkách (po tisíci záznamech, 1 za minutu, nebo podobně). Otevírat pro každý záznam konexi je cesta do pekel.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
25.1.2018 11:09
Avatar
Michael Laki
Člen
Avatar
Michael Laki:28.1.2018 17:39

Ahoj,
dík za postřehy. Data bude ukládat cloudová aplikace která bude naslouchat na TCP a vše co projde tříděním a validací tato jedna cloudová apka uloží do databáze, takže budu mít neustále otevřené jedno jediné db connection pro příchozí data.

 
Nahoru Odpovědět
28.1.2018 17:39
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.