Když jsem si nastudoval implementaci J, K, Q/KDB+ tak mi tohle přijde naprosto obludné. Místo nějaké minimalistické inženířiny se tu zjeví obludné repo v Javě. Nevím, ale mám pocit, že když se něco objeví pod hlavičkou Apache, tak je to nějaký ztracený projekt.
5. 12. 2022, 19:33 editováno autorem komentáře
Máš k tomu i tvrdá čísla nebo jen dojem?
Nevím, co myslíš tím embedded databází, což je v podstatě i hash mapa v základní knihovně, IoTDB také není embedded a stejně velká část embedded použije něco jako sqlite, leveldb, rocksdb. Přímo v go je třeba genji, taky pár let žije.
Stejné tvrzení mohu říct i o javě, C či čemkoliv jiném, většina (na počet) projektů nepřežije delší dobu, nezáleží na jazyku.
Zrovna třeba Prometheus, Victoriametrics, InfluxDB jsou v go, řeší to stejné jako IoTDB a žijí velice aktivně. V go je třeba ještě minio, consul/etcd, cockroach, TiDB a spousty dalších.
Proč by hash mapa nemohla být embedded databáze? Co je potom EAV jako association list v lispu? Lisp byl jeden z prvních, který koncept embedded databází rozšířil právě nad plochými strukturami.
A v jiných jazycích ta úmrtnost byla menší? Trochu nevěřím.
Každopádně tím nechci obhajovat go, je to divný jazyk, kdy je potřeba projekt udržovat při životě, často aktualizovat nebo se poměrně rychle dostane do stavu, kdy ho není možné kompilovat.
Na SD karty se mi osvědčil postgresql s nastaveným wal_writer_delay and commit_delay, je tady pak řada projektů, který to umí zabalit přímo do programu, třeba https://github.com/fergusstrange/embedded-postgres. Výhoda třeba proti sqlite je, že mohu zápis na disk pozdržet v paměti (pokud to dává z hlediska použití smysl).
U jakého řešení jsi nakonec skončil?
Prave molochy ako Postgre som tam nechcel tahat, potreboval om proste cisto key-value Db. No z hladanim som neuspel, dokonca ani v Go ani Rust-e. vsetko boli len wrapery nad LevelDb/RocksDb, alebo to boli realne nefunkcne projekty.
Nakoniec som dany projekt odlozil, lebo prisli ine priority a uspokojivu databazu som nenasiel (potreboval som fault tolerance a aspon nejaku tranzakcnost).
No do finale sa dostali Sqlite a LiteDB.
Ano, je to subjektivní, proto jsem i větu začal "mi připadají".
Apache IoTDB znamená 5000 souborů a 650 000 tisíc řádků kódu, to je obludný. Samotný dependency tree je velice rozsáhlý.
Já ale nemluvil o vzhledu, vždy to ani nemá žádné IU (teda kromě status page, která je standard apache). V kódu je spousta komentářů v různých jazycích (zejména čínština a angličtina), to výrazně snižuje čitelnost a možnost odhalení bugů. Snížená čitelnost znamená vyšší riziko pro bugy, a že těch je. Vnitřní struktura je chaotická, plugable backend pro TsFile je skvělý, ale TsFileSync je už jen rovnák na ohejbák.
Funguje. jak dlouho? Z narůstající komplexitou klesá snaha a možnosti vývojářů projekt posouvat. Pročtěte si to repo, už teď je to obluda.
Tohle fakt na Javě miluju:
https://github.com/apache/iotdb/blob/master/consensus/src/main/java/org/apache/iotdb/consensus/iot/service/IoTConsensusRPCServiceMBean.java
Ono to chcípne samo, jako mnoho Apache projektů. 52 větví, commity v čínštině... to má dobře našlápnuto.
6. 12. 2022, 10:43 editováno autorem komentáře
Tohle fakt na Javě miluju:
https://github.com/apache/iotdb/blob/master/consensus/src/main/java/org/apache/iotdb/consensus/iot/service/IoTConsensusRPCServiceMBean.java
Nejsem si uplne jisty, ale tipnul bych si ze je to nejaky Java archaismus.
V dobe kdy jeste neexistovaly v Jave anotace se to obchazelo tim, ze trida implementovavala prazdne "rozhrani". Tzn tenhle inteface jen label, ktery se da prilepit na nejakou tridu a tim ovlivnit jeji chovani pomoci reflexe.
Asi si to vyžádala Čínska lidová republika:
https://iotdb.apache.org/Community/Community-Powered%20By.html
soudruhu Jirsáku