Szybka lekka baza pod program do faktur

Szybka lekka baza pod program do faktur
0

Witam,

Zastanawiam się czego użyć program ma działać możliwie szybko, mało "ważyć", i radzić sobie z bazą do 10tys produktów będę też chciał zrobić integracje z prestashop. Aha ważna też jest prosta implementacja w C. (na razie pisze dla w prawy ale kto wie chce zrobić to w miarę dobrze)

Zastanawiałem się nad SQLite jakie są wasze propozycje?

AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0

Trudno zaproponować cokolwiek na podstawie ogólnikowej specyfikacji. SQLite na mniejszą funkcjonalność, więc teoretycznie powinien być szybszy, ale bez
testów na konkretnych danych i zapytaniach, ciężko wróżyć. Co więcej, czesto bazy się zmienia w trakicie projektu, co oznacza, że w ogóle trudno jest
dobrać optymlanie bazę. Można użyć jakiejś warstwy pośredniej, która umożliwa łatwą wymianę bazy na inną, ale nie wykorzystuje ona wszystkich
możliwości danej bazy.

MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 7 godzin
  • Postów:1082
1

A ja zaryzykuję (pomimo takich szczątkowych informacji które udzielił pytający) i polecę Firebirda. Posiada on wersję Embedded która nie wymaga instalacji żadnego serwera. A w razie jakby trzeba było się przełączyć na pełnoprawny serwer instalujemy serwer i nic więcej nie zmieniamy poza wskazaniem bazy w programie. Co więcej sama biblioteka udostępnia API napisane w czystym C, więc chyba o to o co chodzi pytającemu.

Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
0

Pytanie czy potrzebujesz bazy relacyjnej. Jeżeli niekoniecznie to baza nierelacyjna może okazać się znacznie lepszym rozwiązaniem. Takie Mongo na przykład.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
Zobacz pozostałe 15 komentarzy
WL
Ok, nie tylko formatowanie. Zatem co takiego money opędza automatem czego nie opędza decimal? Pytam, bo może czegoś nie wiem, a chętnie się dowiem.
Koziołek
W postgresie, gdzie miałem z tym do czynienia (MSSQL wiem, że jest nie dotykam bazy jako takiej), jest wprowadzonych kilka optymalizacji, które powodują, że typ money jest wydajniejszy w porównaniu ze zwyczajnym numeric. Inna sprawa, że ten typ potrafi "pilnować" kwot resztkowych (groszowych). Co prawda w 99% przypadków nie ma to znaczenia, ale czasami trafia się niedziesiętny system monetarny i ze zwykłym numeric mamy problem.
WL
@Koziołek Coś tu Panie herezję siejesz... Nie znam PGSQL na poziomie wybitnym, ale dla mnie to nie są żadne optymalizacje tylko standardowa różnica pomiędzy typem stało a zmienno przecinkowym. Problem z "resztkami" (i zaokrągleniami przy agregacjach) jest znany każdemu żółtodziobowi, który próbował robić to z typami zmiennoprzecinkowymi. Prawdziwy horror-szoł się z tego robi... Poza tym, z linka przesłanego przez @vpiotr jasno wynika, że money w PGSQL jest deprecated i jednoznacznie zalecany jest numeric.
vpiotr
money jest "deprecated" do wersji 8.2, potem być może coś poprawili bo ta uwaga znika: https://www.postgresql.org/docs/8.2/static/datatype-money.html
0

firebird ciekawa propozycja muszę trochę o tym poczytać dzięki

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

10 tys produktów - OK, ale ile transakcji dziennie?
SQLite jest z tego co wiem jednostanowiskowy, na pewno wystarczy?

Jeśli to ma być wielostanowiskowe, to do wyboru są 3 B/O:

  • MariaDB / MySQL: prawie jak baza SQL (dziwne różnice w stosunku do innych silników), bywa najszybsza, niekoniecznie najstabilniejsza
  • PostgreSQL: w pełni transakcyjna baza open source
  • Interbase / Firebird: znany głównie w środowisku post-borlandowskim (Embarcadero Delphi/C++, Free Pascal)
WL
  • Rejestracja:około 21 lat
  • Ostatnio:około 2 miesiące
  • Postów:1082
0
vpiotr napisał(a):

10 tys produktów - OK, ale ile transakcji dziennie?
SQLite jest z tego co wiem jednostanowiskowy, na pewno wystarczy?

Niezupełnie;
http://www.sqlite.org/whentouse.html

Co nie znaczy, że to zawsze dobre rozwiązanie - zależy.

Aczkolwiek, jeśli to miałaby być server side database, czyli dostęp z aplikacji nie bezpośrednio do bazy danych, a przez dedykowaną usługę SOA, to może to być killer ;-)
http://blog.synopse.info/post/2012/09/14/Updated-mORMot-benchmarks-on-another-HW-configuration

No, ale tu już się ciut zapędziłem ;-)

vpiotr
Czytałem tę stronę (link 1) już wcześniej, nie zachęciła mnie. Cytuje: "High Concurrency. SQLite supports an unlimited number of simultaneous readers, but it will only allow one writer at any instant in time. For many situations, this is not a problem. Writer queue up. Each application does its database work quickly and moves on, and no lock lasts for more than a few dozen milliseconds. But there are some applications that require more concurrency, and those applications may need to seek a different solution."
WL
Wiem, znam to. Dlatego napisałem, że to zależy. Pytacz nie napisał czy to C/S czy standalone. A to podstawa. Natomiast SQLIte jako server side, gdzie masz możliwość zarządzania kolejkami zapisu, robi wrażenie pod kątem wydajności. Tak czy siak - na jego miejscy nie pchałbym się ani w SQLite ani w MySQL ;-)
datdata
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 7 lat
  • Postów:957
0

Czemu C?


"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects." Robert Heinlein.
0

A czemu nie C :) (żeby nie było akurat w tym temacie nie ma dyskusji będę pisał w C i koniec )

Pisze dla wprawy czyli for fun. Ale chce już napisać dobrze może coś z tego wyjdzie.

no tu macie racje mimo że myślałem o programie 1 stanowiskowym to mądrze było by skorzystać z rozwiązania które pozwoli mi w przyszłości zaimplementować obsługę wielu stanowisk.
Co do 10 tys produktów to założyłem że tyle ma przeciętny sklep to założę też że 100 transakcji dziennie. (oczywiście powinienem pisać tak żeby był w stanie obsłużyć jak najlepiej jak najwięcej transakcji i dowolną liczbę produktów i pewnie tak się będę starał)

MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 7 godzin
  • Postów:1082
0
xvc napisał(a):

Co do 10 tys produktów to założyłem że tyle ma przeciętny sklep to założę też że 100 transakcji dziennie. (oczywiście powinienem pisać tak żeby był w stanie obsłużyć jak najlepiej jak najwięcej transakcji i dowolną liczbę produktów i pewnie tak się będę starał)
Akurat moim zdaniem przy takiej ilości danych nie masz się co przejmować za bardzo, ponieważ to jest mała ilość danych jak dla dzisiejszych serwerów. Mój system na domowym laptopie pod wirtualką radzi sobie wyśmienicie jak mam 300 000 pozycji dokumentów w bazie oraz jakieś 30 000 produktów.

AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0

Jeśli do bazy są wysyłane proste zapytania, nie częściej niż kilkadziesiąt razy na sekundę, to może być miliard rekordów i baza będzie wyrabiała.

0

Nie wiem czy to dobrze czy nie zdecydowałem się na sqlite. I wymyśliłem sobie że w razie rozbudowy ew przerobie na jeden główny [klient/serwer] + kilka [klientów] i to główny będzie po prostu kolejkował zapytania.

AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0

Uważaj żebyś sobie nie utrudnił zadania. Baza może pod wieloma względami zastąpić serwer, sama jest serwerem. Oczywiście nie taka baza jak SQLite. Jeśli potem ekstremalna wydajność nie będzie Ci potrzebna, to rób od razu na mysql, postgresie, mssqlu, itd.

Pozdrawiam

Marcin.Miga
MySQL i wydajność... Raczysz żartować... Chyba że do prostych zapytań SELECT ... FROM tabela, gdzie tabela jest typu MyISAM
AB
Nigdzie nie pisałem że mysql jest lub nie jest wydajny.
MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 7 godzin
  • Postów:1082
0
artur_bredzki napisał(a):

Jeśli do bazy są wysyłane proste zapytania, nie częściej niż kilkadziesiąt razy na sekundę, to może być miliard rekordów i baza będzie wyrabiała.
Pytanie co oznacza proste zapytanie?

xvc napisał(a):

Nie wiem czy to dobrze czy nie zdecydowałem się na sqlite. I wymyśliłem sobie że w razie rozbudowy ew przerobie na jeden główny [klient/serwer] + kilka [klientów] i to główny będzie po prostu kolejkował zapytania.
Moim zdaniem średnie rozwiązanie. Jeśli to jest Twoja 1 poważna aplikacja nie twórz warstw pośrednich, bo się zagubisz. Jednak jeśli już tak mocno chcesz to rób, jednak pisz tak od razu aby potem nie przepisywać 90% aplikacji.

artur_bredzki napisał(a):

Uważaj żebyś sobie nie utrudnił zadania.
Z tym się zgodzę.

artur_bredzki napisał(a):

Baza może pod wieloma względami zastąpić serwer, sama jest serwerem.
Co Ty gadasz. Od kiedy baza jest serwerem. Baza to baza, serwer to serwer. Baza tylko trzyma dane i to jest plik, bądź kilka. Więc jak to może być serwer...

WL
  • Rejestracja:około 21 lat
  • Ostatnio:około 2 miesiące
  • Postów:1082
0
Mr.YaHooo napisał(a):
artur_bredzki napisał(a):

Baza może pod wieloma względami zastąpić serwer, sama jest serwerem.
Co Ty gadasz. Od kiedy baza jest serwerem. Baza to baza, serwer to serwer. Baza tylko trzyma dane i to jest plik, bądź kilka. Więc jak to może być serwer...

Raczej, co Ty gadasz?
Przecież każdy RDBMS C/S to jest serwer baz danych. Serwer! I każdy!
Przecież nie "gadasz" z plikiem zawierającym bazę (lub bazy) danych, tylko z serwerem prawda?
Nowoczesne RDBMSy to daleko więcej, niż zwykłe składowisko danych w plikach i sam doskonale o tym wiesz.
Zatem, co Ty gadasz? ;-)

MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 7 godzin
  • Postów:1082
0
wloochacz napisał(a):

Raczej, co Ty gadasz?
Przecież każdy RDBMS C/S to jest serwer baz danych. Serwer! I każdy!
Przecież nie "gadasz" z plikiem zawierającym bazę (lub bazy) danych, tylko z serwerem prawda?
Nowoczesne RDBMSy to daleko więcej, niż zwykłe składowisko danych w plikach i sam doskonale o tym wiesz.
Zatem, co Ty gadasz? ;-)
Tak to jest serwer bazodanowy. Ale nie róbmy tak, że baza danych == serwer, bo to nie prawda. Ja wiem, że to jest kwestia nazewnictwa. Jednak przychylam się do tego, że baza danych != serwer. Baza to tylko (np. wiki)

Baza danych – zbiór danych zapisanych zgodnie z określonymi regułami.
Natomiast serwer

Serwer – program świadczący usługi na rzecz innych programów, zazwyczaj korzystających z innych komputerów połączonych w sieć.
Oczywiście w dzisiejszych nowoczesnych RDBMS jedno nie jest w stanie istnieć bez drugiego. Czepiam się tylko nazewnictwa.

I właśnie to, że aplikacja gada nie z plikiem, a z serwerem odróżnia serwer od bazy danych. Analogicznie można powiedzieć, że serwer IIS/Apache czy co tam jeszcze sobie ktoś chce to strona www :)

0

pisz tak od razu aby potem nie przepisywać 90% aplikacji.

słuszna uwaga zrobię tak od razu.

nie twórz warstw pośrednich warstw pośrednich, bo się zagubisz

o to chodzi to nie jest pisanie na czas :) tylko dla wprawy żeby się coś nauczyć

AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
artur_bredzki napisał(a):

Baza może pod wieloma względami zastąpić serwer, sama jest serwerem.
Co Ty gadasz. Od kiedy baza jest serwerem. Baza to baza, serwer to serwer. Baza tylko trzyma dane i to jest plik, bądź kilka. Więc jak to może być serwer...</quote>
Bazę, jak każdą inną aplikację, można wtedy nazwać serwerem, gdy pełni rolę serwera w trakice komunikacji z innymi aplikacjami.
https://pl.wikipedia.org/wiki/Serwer
Pozdrawiam

Zobacz pozostałe 2 komentarze
KA
jeju przecież można baze typu postgresql która to nie jest samymi plikami na dysku a i działającym serwerkiem napisanym w C i słuchającym na socketcie połączeń nazwać serwerem bazodanowym. nie ma się co czepiać siebie nawzajem o takie pierdoły
KA
może być serwer HTTP, serwer Xorg a nawet serwer innych usług jak w GNU Hurd
AB
Są dwa argumeny, oba słuszne i oba sprzeczne z sobą. Pierwszy taki, że trzeba mówić zwięźle, drugi taki, że trzeba mówić precyzyjnie i jednoznacznie. On ma rację, że baza to nie serwer, ani nie system zarządzania bazą. Baza danych to zbiór danych w jakimś formacie. Ale skrótowo, czesto i powszechnie, na oprogramowanie które słucha na gniazdku mówi się serwer, a na system zarządzania mówi się baza.
KA
tak bardzo fajnei napisane. to prawda
MY
@artur_bredzki tak, dlatego w miarę możliwości staram się walczyć z takimi skrótowcami. Jednak nie jest to łatwe, bo sam się czasem łapię na takich rzeczach :)
MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 7 godzin
  • Postów:1082
0
xvc napisał(a):

o to chodzi to nie jest pisanie na czas :) tylko dla wprawy żeby się coś nauczyć
To w takim razie możesz robić to w bardziej rozbudowany sposób.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)