Portál AbcLinuxu, 10. května 2025 05:27
1) čakať na povely/žiadosti o dáta od klientskej aplikácie, 2) získavať dáta z hardware a ukladať ich a 3) poslúchať na TCP sockete a odosielať dáta podľa požiadania servera.Rozmýšlam o POSIXových threadoch, ale nie som si istý či sa jedná o najlepšie riešenie. Pôvodne som si myslel, že SQLite bude dobré jednoduché úložisko, ale zistil som, že nepodporuje paralelný zápis aj čítanie(jedine zamykanie). Tak teraz uvažujem o textových súboroch. Lenže je možne dosiahnuť paralelné čítanie aj zápis? Pravdepodobne len so zámkami, ale obávam sa o výkon. Jedná sa totiž o embedded zariadenie a zápisy budú časté, niekoľko za sekundu, čítania zas až tak časté nebudú(raz za hodinu približne). Myslíte, že je to dobrý nápad? Alebo uvažovať o nejakom embedded MySQL/Firebird? Ale, čo ten overhead? Ešte jedna možnosť by bola sa na celé multi-threading veci vykašlať a riešiť to v rámci jednej event loop. Ďakujem za odpovede.
Chtělo by to více podrobností:
Several computer processes or threads may access the same database without problems. Several read accesses can be satisfied in parallel. A write access can only be satisfied if no other accesses are currently being serviced, otherwise the write access fails with an error code (or can automatically be retried until a configurable timeout expires). This concurrent access situation would change when dealing with temporary tables.Ak tomu rozumiem správne, tak zápis môže sa diať len pokiaľ sa nedeje čítanie. K tomu mi napadli dve veci: ako zabezpečiť aby sa nezapisovalo keď chcem čítat, resp. čo s tými dátami, budem ich zatiaľ nejako bufferovať a potom zapisovať? To je ale dosť hnusný hack. Druhá vec je, že taký istý problém budem mať asi aj so súbormi.
SQLite connections can open two kinds of transactions, read and write transactions. This is not done explicitly, a transaction is implicitly a read-transaction until it first writes to a database table, at which point it becomes a write-transaction. At most one connection to a single shared cache may open a write transaction at any one time. This may co-exist with any number of read transactions.Mám za to, že ak explicitne nezačneš v Sqlite transakciu, tak on do transakcie zabalí každý jeden SQL príkaz osobitne (t.j. každý príkaz sa vykoná ako BEGIN-príkaz-COMMIT). Takže zápisy sa vykonajú postupne v nejakom poradí, zatiaľčo čítanie to nijak neovplyvní. Ako sám píšeš, zamykanie budeš musieť riešiť aj pri iných uložiskách, a toto je podľa mňa vyriešené celkom dobre samo od seba. Ale ber ma s rezervou, neskúšal som to, len tak mudrujem.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.