🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #195548

Re: struktura bazy do zbierania danych z czujników

#195548
From: irq
Date: Sat, 10 Feb 2018 18:02
53 lines
5574 bytes
W dniu sobota, 10 lutego 2018 17:23:21 UTC+1 użytkownik wloochacz napisał:
> W dniu 2018-02-09 o 19:55, irq pisze:
> > W dniu piątek, 9 lutego 2018 14:43:52 UTC+1 użytkownik wloochacz napisał:
> >> W dniu 2018-02-08 o 18:36, irq pisze:
> >> /ciach/
> >>
> >>> A model relacyjny i tak będzie potrzebny do raportowań i kojarzenia czujników z ich lokalizacjami.
> >> A niby dlaczego jest potrzebny, czyli niezbędny?
> > 
> > Wynika to z tego fragmentu mojej wypowiedzi, który ciachnąłeś. 
> No cóż, nie zgadzam się z tym w ogóle.
> 
> > Uniezależnienie lokalizacji pomiaru od niekoniecznie stałej lokalizacji czujników. Z późniejszych wypowiedzi kolegi pytającego wynika, że raczej o to nie dba, bo buduje mały system, w którym może to nie mieć miejsca, ani znaczenia. Ja założyłem, że może to być dowolnie duży i nadający się do elastycznej rozbudowy system, w którego ekspolatacji trzeba spróbować przewidzieć takie rzeczy jak zarządzanie ruchem i migracjami elementów jego wyposażenia. A zatem pomiar z identyfikatorem konkretnego czujnika z dzisiaj i pomiar z tym samym identyfikatorem za rok, to niekoniecznie muszą być pomiary dotyczące tego samego miejsca.
> 
> I właśnie dlatego rozwiązania NoSQL w tym przypadku mogą pokazać swoją 
> przydatność i przewagę w stosunku do baz relacyjnych.
> Mówić krótko - jeśli mamy ustandaryzowany model danych o zerowej lub 
> niewielkiej dynamice zmian schematu danych, bazy relacyjne pewnie będą 
> lepsze.

w tym przypadku mamy model, po którym nie powinniśmy się spodziewać wysokiej dynamiki zmian. No chyba, że rzeczywiście pojawi się wymóg rejestrowania stężenia SO2 :)

> 
> Tu wskazujesz dokładnie coś odwrotnego.
> Proponowany model EAV (zwany antywzorcem Entity Attribute Value) dla baz 
> relacyjnych to zabójstwo dla ich wydajności, zwłaszcza przy 
> niebagatelnej ilości danych.

zabójstwo, ale nie dla wydajności bazy danych, a wydajności "modelu dostępu" do tablicy skonstruowanej z zastosowaniem EAV. Jeżeli ktoś się uprze raportować dane w oparciu o odczyt z jedynej samotnej tabeli z zapisem surowych próbek to żaden model nie będzie wydajny. 

> 
> A w omawianym przypadku sam podniosłeś dokładnie takie wymagania ;-)
> 

tak, ale w odniesieniu do samej tabeli przechowującej pierwotne dane, w odniesieniu do których nie jeszcze ma pełnej wiedzy co do ich kształtu i zakresu spodziewanych zmian. Pełny model relacyjny może zaś znaleźć zastosowanie w zakresie organizacji danych do wydajnego ich raportowania. 

I tu właśnie, nawiązując do sąsiedniej Twojej odpowiedzi, PostgreSQL z typem, podkreślam: typem danych json, może być doskonałym środowiskiem do realizacji takiego hybrydowego rozwiązania. Chciałem wypowiadać się zwięźle - dlatego użyłem skrótu EAV jako hasłowego określenia, ale nie było to najszczęśliwsze posunięcie. Dlatego chętnie przeszedłem na używanie skrótu JSON, zwłaszcza w kontekście typu danych json (jsonb) w postgresie.

Definicja tabeli próbek danych mogłaby być taka jak:

CREATE TABLE data_sample (
    id          bigserial PRIMARY KEY,
    dt          timestamp,
    sensor_id   integer, -- albo text? - prawdopodobnie powtórzenie któregoś elementu z sample - celowy nadmiar dla usprawnienia agregacji i dostępu
    sample      json     -- albo jsonb - i tutaj dowolna struktura
);
-- i być może:
CREATE INDEX ON data_sample (date_trunc('day', dt), sensor_id);
-- zamiast 'day' - może 'hour'?, 'week'? - zależnie od potrzeb.

"dt" oraz "sensor_id" są uchwytami do modelu relacyjnego i przetwarzania danych w kierunku ich przygotowania do raportowania. "sample" zawiera całą pozostałą, nie w pełni zdefiniowaną jeszcze, zawartość danych.

Tak jak pisałem wcześniej, warto rozważyć partycjonowanie tej tabeli (wg, tygodni? miesięcy? lat?).
Technical Details
Message-ID: <95d9656f-cca4-400a-bd81-5ba4bad843bc@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!o66no346574ita.0!news-out.google.com!m16ni299itm.0!nntp.google.com!o66no346572ita.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <p5an7s$eou$1@node2.news.atman.pl> <d33f511a-0c12-4805-abd0-06577cabc391@googlegroups.com> <5a7c85c5$0$671$65785112@news.neostrada.pl> <8689e094-71f6-4189-86ef-0e9bf74ce2a1@googlegroups.com> <5a7da595$0$670$65785112@news.neostrada.pl> <bfecb350-16cc-4b59-8a3d-68cf4972fb55@googlegroups.com> <5a7f1c60$0$676$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
X-Received: by 10.36.29.148 with SMTP id 142mr5662262itj.10.1518285765058;        Sat, 10 Feb 2018 10:02:45 -0800 (PST)
X-Received: by 10.157.87.132 with SMTP id q4mr263276oth.2.1518285764735; Sat, 10 Feb 2018 10:02:44 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!o66no346574ita.0!news-out.google.com!m16ni299itm.0!nntp.google.com!o66no346572ita.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.bazy-danych
Date: Sat, 10 Feb 2018 10:02:44 -0800 (PST)
In-Reply-To: <5a7f1c60$0$676$65785112@news.neostrada.pl>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=83.28.125.218; posting-account=HsGcpQoAAABR8eqXdcgZHaZMq6uPUZY5
NNTP-Posting-Host: 83.28.125.218
References: <p5an7s$eou$1@node2.news.atman.pl> <d33f511a-0c12-4805-abd0-06577cabc391@googlegroups.com> <5a7c85c5$0$671$65785112@news.neostrada.pl> <8689e094-71f6-4189-86ef-0e9bf74ce2a1@googlegroups.com> <5a7da595$0$670$65785112@news.neostrada.pl> <bfecb350-16cc-4b59-8a3d-68cf4972fb55@googlegroups.com> <5a7f1c60$0$676$65785112@news.neostrada.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <95d9656f-cca4-400a-bd81-5ba4bad843bc@googlegroups.com>
Subject: Re: struktura bazy do zbierania danych z czujników
From: irq <ipluta62@gmail.com>
Injection-Date: Sat, 10 Feb 2018 18:02:45 +0000
Lines: 96
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit