Siirry sisältöön

Storh

Tiedostopohjaiset tietueet kohteelle PHP: JSONC-dokumentit, vain lisäystä tukevat segmentoidut lokit ja lokipohjaiset jonot, joissa on UUIDv7-tunnisteet.

Pääte
composer require storh/storh

Uusin julkaisu v0.5.2 MIT PHP 8.2+

Käytännössä

Pika-aloitus kahdessa osassa: dokumentti tallennuksen juuressa, sitten lokimerkintä ja jonotyö sen rinnalla.

Yksi juuri, kolme moottoria

StorageRoot::resolve() normalisoi perushakemiston ja nimitilan juureksi, ja kukin moottori luo oman hakemistonsa sen alle ensimmäisellä käyttökerralla.

Jokainen moottori palauttaa StorageRecord-objekteja, joissa on id() ja data(). Jono lisää jokaisen varauksen ja valmistumisen tapahtumalokiinsa.

Asiakirjat
use Storh\DocStore;
use Storh\Queue;
use Storh\RecordQuery;
use Storh\SegmentedLog;
use Storh\StorageRoot;

$root = StorageRoot::resolve(__DIR__ . '/var/storh', 'demo');

$docs = new DocStore($root, 'pages');
$home = $docs->put([
    'kind' => 'page',
    'title' => 'Home',
]);

$loaded = $docs->get($home->id());

JSONC-dokumenttisäilö

Yksi JSONC-tiedosto tietuetta kohden, UUIDv7-tunnisteet, ositus UUID-tunnisteen viimeisen ryhmän kahden merkin mukaan, atominen korvaus ja suoratoistettavat kenttäsuodattimet.

Segmentoitu loki

Vain lisäystä tukevat segmentit, joissa JSON-rivit on etuliitetty pituudella ja tarkistussummalla; harvat indeksit, kursorin ja aikavälin mukaiset haut, kaatumisesta palautuminen ja tiivistäminen.

Lokijono

Työt siirtyvät odottavista käsittelyssä oleviin ja valmiisiin tiloihin kompaktien, vain lisäystä tukevien jonotapahtumien avulla.

UUIDv7-tietueet

Järjestettävät ja aikaan kohdistettavat tunnisteet vakaiden kursorien, rajattujen hakujen ja ositusta tukevien tallennuspolkujen käyttöön.

Atomiset kirjoitukset

Väliaikaistiedostoon kirjoittaminen ja atominen uudelleennimeäminen pitävät tietueet ehjinä. Kirjoittajan kaaduttua seuraava avaus siivoaa sen orvot väliaikaistiedostot.

Osittaisen kirjoituksen palautus

Segmenttilukujen aikana tarkistetaan pituus- ja tarkistussummakentät; palautus katkaisee osittaiset loppurivit.

Tiedostopohjainen

Ei tietokantapalvelinta, kehysadapteria eikä Composer-ajonaikaisia paketteja; kutsuja antaa hakemiston.

Lukee JSONC

Tietuetiedostot voivat sisältää kommentteja ja loppupilkun. storh kirjoittaa kompaktin yksirivisen JSON-muodon, joten kommentit säilyvät seuraavaan kirjoitukseen asti.

Kyselyrakennin

Sujuvat kyselyt, kuten where('status')->in([...]), toimivat DocStoressa ja SegmentedLogissa; DocStore käyttää toissijaisia indeksejä, jos niitä on.

Toissijaiset indeksit

Yhtäsuuruus-, yksilöllisyys- ja alueindeksit tallennetaan tiedostoina kokoelman viereen. Ne johdetaan tietueista ja voidaan rakentaa uudelleen milloin tahansa.

Skeemat

Valinnaiset kokoelmaskeemat validoivat jokaisen kirjoituksen ja määrittävät, mitkä kentät indeksoidaan.

SQL-peilaus

Siirrä kokoelmia kohteeseen SQLite tai MySQL yhdistämistä, hakua ja raportointia varten tiedostojen pysyessä ensisijaisina. Tarvitsee ext-pdo- tai ext-mysqli-laajennuksen vain käytettäessä.

Miksi Storh

Hakemisto, ei palvelinta

Välität perushakemiston, ja storh kirjoittaa siihen. Se tarvitsee PHP 8.2:n ja ext-jsonin, mutta ei Composer-ajonaikaisia paketteja eikä kehysadapteria.

Yksi tietuerakenne, kolme tallennusmuotoa

Dokumentit, lokit ja jonot tallentavat kaikki UUIDv7-tunnisteen ja datataulukon. Valitse levyasettelu työkuorman mukaan ja pidä kaikki kolme saman juuren alla.

Suoritettavia tarkistuksia

verify() tarkistaa indeksit ja lokin tilan vertaamalla niitä tiedostojen täydelliseen läpikäyntiin. repair() asettaa vioittuneet tietueet karanteeniin ja katkaisee rikkoutuneet lokin loput, ja CLI tulostaa JSON cron-töitä ja kuntotarkistuksia varten.

Vertailutestit ja niiden asetukset

README julkaisee mediaaniarvot moottoria kohden 50,000 tietueen aineistolla, Apple M1 Prolla ja PHP 8.5:llä, esimerkiksi 5,6 µs pistelukua kohden. Jokainen näiden ajojen kirjoitus synkronoidaan levylle, joten kirjoitusnopeudet riippuvat tiedostojärjestelmästä.

Vertailu

storh on tiedostopohjainen tallennusratkaisu, ei relaatiokyselymoottori, joten nämä työkalut hoitavat joitakin tehtäviä, joita se ei kata.

Storh verrattuna muihin työkaluihin
SQLite Sopii hyvinItsenäinen SQL-moottori yhdessä tiedostossa, jossa on sarjoitettavat ACID-tapahtumat, jotka kestävät ohjelman kaatumisen tai sähkökatkon. Dokumentaatio esittelee sen satunnaisten datatiedostojen korvaajana. Ero kohteeseen Storhstorh säilyttää yhden JSON-tiedoston tietuetta kohden, eikä sen ydin tarvitse PDO-ohjainta. Se ei tue usean tietueen tapahtumia, ja dokumentaatio ohjaa käyttämään siihen varsinaista tietokantaa. Se voi siirtää kokoelmia kohteeseen SQLite yhdistämistä ja raportointia varten tiedostojen pysyessä ensisijaisina.
MySQL Sopii hyvinRelaatiotietokanta, jota palvelee monisäikeinen SQL-palvelin ja johon kuuluu asiakasohjelmia ja kirjastoja, hallintatyökaluja sekä laaja valikoima rajapintoja. Ero kohteeseen Storhstorh toimii PHP-prosessin sisällä hakemistoa käyttäen, joten ylläpidettävää palvelinta ei ole. Yhdistämistä, hakua ja raportointia varten se peilaa kokoelmat kohteeseen MySQL, myös olemassa olevan mysqli-kahvan kautta, ja tiedostot pysyvät totuuden lähteenä.
SleekDB Sopii hyvinTiedostopohjainen dokumenttitietokanta kohteessa PHP ilman kolmannen osapuolen riippuvuuksia, tallentaa skeemattoman datan tavallisina JSON-tiedostoina. Sen kyselykieli API sisältää yhdistämiset, tekstinhaun, ryhmittelyn ja suodatuksen ryhmiteltyjen tulosten perusteella sekä sisäkkäisten ominaisuuksien suodattimet. Ero kohteeseen Storhstorh yhdistää dokumenttisäilöönsä vain lisäystä tukevan segmentoidun lokin ja lokipohjaisen jonon saman juuren alle sekä synkronoi jokaisen kirjoituksen levylle ennen kuin ilmoittaa sen tallentuneen. Yhdistämiset eivät kuulu storh-toimintoihin; niitä varten se siirtää kokoelmia kohteeseen SQLite tai MySQL.

Kysymykset ja vastaukset

Lyhyet vastaukset Storh-dokumentaatiosta.

Aloita pika-aloituksesta ja siirry sitten Moottorin valintaan, jotta voit valita työkuormallesi DocStoren, SegmentedLogin tai Queuen.