We created a new video streaming app to help you learn about ScyllaDB. This blog covers its features, tech stack, and data modeling. Olemme juuri julkaisseet uuden ScyllaDB-näytteen sovelluksen, videoiden suoratoisto-sovelluksen. Tämä blogi kattaa videon suoratoistosovelluksen ominaisuudet, tekniikan pino ja rikkoo tietomallinnusprosessin. Saatavilla Githubissa Video streaming -sovelluksen ominaisuudet Sovelluksella on minimaalinen muotoilu, jossa on tärkeimmät videon suoratoisto-sovelluksen ominaisuudet: Luettelo kaikista videoista, lajiteltu luomisen päivämäärän mukaan (kotisivu) Luettelo videoista, joita aloitit katsomalla Katso video Jatka katsomista video, jossa jätit pois Näytä edistymispalkki kunkin videon alapuolella Tekniikka Stack Ohjelmointikieli: TypeScript Tietokanta: ScyllaDB Kehys: NextJS (sivuja reititin) Komponenttikirjasto: Material_UI ScyllaDB:n käyttäminen matalan viiveen videoiden suoratoisto-sovelluksissa ScyllaDB on matalan viiveen ja korkean suorituskyvyn NoSQL-tietokanta, joka on yhteensopiva Apache Cassandran ja DynamoDB: n kanssa. Se soveltuu hyvin videon suoratoisto-sovellusten suurten tietojen tallennus- ja hakuvaatimusten käsittelyyn. ScyllaDB: llä on ohjaimia kaikilla suosittuilla ohjelmointikielillä ja kuten tämä näyte sovellus osoittaa, se integroituu hyvin nykyaikaisiin verkkokehityskehyksiin, kuten NextJS. Alhainen viive videon suoratoistopalvelujen yhteydessä on ratkaisevan tärkeää saumattoman käyttäjäkokemuksen tarjoamiseksi. Korkean suorituskyvyn perustaksi sinun on suunniteltava tietomalli, joka sopii tarpeisiisi. Video streaming -sovelluksen datamallinnus Niissä , opetamme, että NoSQL-tietomallinnuksen tulisi aina alkaa sovelluksestasi ja kyselyistä ensin. Sitten työskentelet taaksepäin ja luot järjestelmän sovelluksessa suoritettavien kyselyiden perusteella. ScyllaDB-yliopiston tietomallintakurssi Ottaen huomioon tämä, menkäämme yli kyselyistä, joita videon suoratoistosovelluksemme tarvitsee kunkin sivun latauksen yhteydessä! Sivut, jotka ovat luokassa Jatka katselua Tällä sivulla voit luetella kaikki videot, jotka he ovat alkaneet katsella.Tämä näkymä sisältää videon pienkuvat ja edistymispalkin pienkuvan alla. Query – get watch progress: SELECT video_id, progress FROM watch_history WHERE user_id = ? LIMIT 9; Schema – watch history table: CREATE TABLE watch_history ( user_id text, video_id text, progress int, watched_at timestamp, PRIMARY KEY (user_id) ); Tätä kyselyä varten on järkevää määrittää `user_id` osioavaimeksi, koska se on suodatin, jota käytämme kyselyyn katseluhistorian taulukossa. Pidä mielessä, että tätä järjestelmää on ehkä päivitettävä myöhemmin, jos on kysely, joka vaatii suodatusta muissa sarakkeissa `user_id`:n ulkopuolella. Edistymisen arvon lisäksi sovelluksen on myös kerättävä kunkin videon todelliset metatiedot (esimerkiksi otsikko ja pienimuotoinen kuva). Query – get video metadata: SELECT * FROM video WHERE id IN ?; Huomaa, miten käytämme "IN" -operaattoria eikä "=", koska meidän on kerättävä luettelo videoista, ei vain yksi video. Schema – video table: CREATE TABLE video ( id text, content_type text, title text, url text, thumbnail text, created_at timestamp, duration int, PRIMARY KEY (id) ); Videotaulukon osalta määrittelemme 'id' osioavaimeksi, koska se on ainoa suodatin, jota käytämme kyselyssä. Sivusto: Katso video Jos napsautat mitä tahansa "Katso" -painiketta, ne ohjataan sivulle, jossa on videosoitin, jossa he voivat käynnistää ja keskeyttää videon. Query – get video content: SELECT * FROM video WHERE id = ?; Tämä on hyvin samanlainen kysely kuin Seuraa-sivulla käynnissä oleva kysely. Näin ollen sama järjestelmä toimii hyvin myös tähän kyselyyn. Schema – video table: CREATE TABLE video ( id text, content_type text, title text, url text, thumbnail text, created_at timestamp, duration int, PRIMARY KEY (id) ); Sivut, jotka ovat luokassa Uusimmat videot Analysoimme tätä sivua viimeksi, koska se on monimutkaisinta tietomallinnuksen näkökulmasta.Tämä sivu luetteloi kymmenen viimeisintä ladattua videota, jotka ovat saatavilla tietokannassa, joka on järjestetty videon luomisen päivämäärän mukaan. Meidän on kerättävä nämä videot kahdessa vaiheessa: ensin saat aikaleimat, sitten saat todellisen videosisällön. Query – get the most recent ten videos’ timestamp: SELECT id, top10(created_at) AS date FROM recent_videos; Huomaat ehkä, että käytämme mukautettua toimintoa nimeltä `top10()`. Tämä ei ole vakiotoiminto ScyllaDB: ssä. Tämä toiminto palauttaa taulukossa olevien uusimpien 'created_at' aikaleimien joukon. Se voi olla loistava tapa ratkaista ainutlaatuiset datamallintakysymyksesi. Käyttäjän määrittelemät toiminnot Uuden UDF:n luominen ScyllaDB:ssä Näitä aikaleima-arvoja voidaan sitten käyttää kyselemään todellista videosisältöä, jota haluamme näyttää sivulla. Query – get metadata for those videos: SELECT * FROM recent_videos WHERE created_at IN ? LIMIT 10; Schema – recent videos: CREATE MATERIALIZED VIEW recent_videos_view AS SELECT * FROM streaming.video WHERE created_at IS NOT NULL PRIMARY KEY (created_at, id); Viimeaikaisten videoiden materialisoituneessa näkymässä ensisijainen avain on luotu-sarakke, koska suodatamme ensimmäisen kyselyn ensimmäisessä sarakkeessa, jotta saamme viimeisimmät aikaleima-arvot. . Kuuma jakautuminen Lisäksi käyttöliittymä näyttää myös pienen edistymispalkin kunkin videon alapuolella, joka osoittaa edistymisen, jonka olet tehnyt kyseisen videon katselemisessa. Query – get watch progress for each video: SELECT progress FROM watch_history WHERE user_id = ? AND video_id = ?; Schema – watch history: CREATE TABLE watch_history ( user_id text, video_id text, progress int, watched_at timestamp, PRIMARY KEY (user_id, video_id) ); Olet ehkä huomannut, että kellon historiaa käytettiin jo aikaisemmassa kyselyssä tietojen keräämiseen. Tällä kertaa kaavio on muutettava hieman, jotta se sopii tähän kyselyyn. Lisäämme `video_id` klusteriavaimeksi. Katsotaan nyt lopullinen tietokannan kaavio! Lopullinen tietokanta CREATE KEYSPACE IF NOT EXISTS streaming WITH replication = { 'class': 'NetworkTopologyStrategy', 'replication_factor': '3' }; CREATE TABLE streaming.video ( id text, content_type text, title text, url text, thumbnail text, created_at timestamp, duration int, PRIMARY KEY (id) ); CREATE TABLE streaming.watch_history ( user_id text, video_id text, progress int, watched_at timestamp, PRIMARY KEY (user_id, video_id) ); CREATE TABLE streaming.recent_videos ( id text, content_type text, title text, url text, thumbnail text, created_at timestamp, duration int, PRIMARY KEY (created_at) ); Käyttäjän määrittelemä toiminto Viimeisimmät videot -sivulle -- Create a UDF for recent videos CREATE OR REPLACE FUNCTION state_f(acc list<timestamp>, val timestamp) CALLED ON NULL INPUT RETURNS list<timestamp> LANGUAGE lua AS $$ if val == nil then return acc end if acc == nil then acc = {} end table.insert(acc, val) table.sort(acc, function(a, b) return a > b end) if #acc > 10 then table.remove(acc, 11) end return acc $$; CREATE OR REPLACE FUNCTION reduce_f(acc1 list<timestamp>, acc2 list<timestamp>) CALLED ON NULL INPUT RETURNS list<timestamp> LANGUAGE lua AS $$ result = {} i = 1 j = 1 while #result < 10 do if acc1[i] > acc2[j] then table.insert(result, acc1[i]) i = i + 1 else table.insert(result, acc2[j]) j = j + 1 end end return result $$; CREATE OR REPLACE AGGREGATE top10(timestamp) SFUNC state_f STYPE list<timestamp> REDUCEFUNC reduce_f; Tätä Mutta voit myös Funktion luominen varmistaa, että UDF:t on otettu käyttöön scylla.yaml-määritystiedostossa (sijainti: /etc/scylla/scylla.yaml): UDF käyttää Lunaa käytä Wasmia luodaksesi UDF:itä ScyllaDB:ssä Kloonaa repo ja aloita! Jotta aloittaisi... Kloonaus kloonaus kloonaus: git clone https://github.com/scylladb/video-streaming https://github.com/scylladb/video-streaming Käytä riippuvuuksia: npm install Muokkaa konfigurointitiedostoa: APP_BASE_URL="http://localhost:8000" SCYLLA_HOSTS="172.17.0.2" SCYLLA_USER="scylla" SCYLLA_PASSWD="xxxxx" SCYLLA_KEYSPACE="streaming" SCYLLA_DATACENTER="datacenter1" Siirrä tietokanta ja lisää näytetiedot: npm run migrate Käynnistä palvelin: npm run dev Pakkaaminen ylös Toivomme, että nautit videon suoratoisto-sovelluksesta ja se auttaa sinua rakentamaan alhaisen viiveen ja korkean suorituskyvyn sovelluksia ScyllaDB: llä. Missä on ilmaisia kursseja ja , ja paljon muuta! Jos sinulla on kysyttävää videon suoratoistosovelluksesta tai ScyllaDB: stä, Ja sitten keskustellaan! ScyllaDB yliopisto Tietomallinnus ScyllaDB kuljettajat Tutustu foorumiimme Lisää ScyllaDB näytteitä sovelluksia: IOTA - IOTA Cloud Getting Started -opas Ominaisuudet Store Asiaankuuluvat resurssit : Videoiden suoratoisto GitHub repository -sovelluksella Tietoja ScyllaDB:stä Miten ScyllaDB: n hajautetut aggregaatit vähentävät kyselyn suorittamisen aikaa jopa 20X Wasmtime: UDF:n tukeminen ScyllaDB:ssä WebAssemblyllä ScyllaDB dokumentaatio ScyllaDB käynnistyy ScyllaDB käynnistyy Tekijä: Attila Tóth on ScyllaDB: n kehittäjän puolestapuhuja. hän kirjoittaa opetusohjelmia ja blogiviestejä, puhuu tapahtumissa, luo esityksiä ja näytteitä sovelluksista auttaakseen kehittäjiä rakentamaan korkean suorituskyvyn sovelluksia. Ahtisaari Tóth