We created a new video streaming app to help you learn about ScyllaDB. This blog covers its features, tech stack, and data modeling. Thina ushiye isicelo esitsha ScyllaDB isampuli, isicelo video. Le nkqubo Le nqaku kubandakanya iimpawu ze-video streaming app, i-tech stack, kwaye ibandakanya inqubo ye-data modeling. Zifumaneka kwi-GitHub Ividiyo Streaming App Iimpawu I-app ine-design yobuncinane kunye neempawu ezininzi zokusetyenziswa kwevidiyo ze-streaming: Uluhlu zonke iividiyo, zihlanganisa ngexesha lokuvelisa (isayithi lokuqala) Uluhlu lwevidiyo ezidlulileyo ezidlulileyo Yenza ividiyo Qhagamshelana nqakraza ividiyo apho uye wafumana Ukubonisa i-progress bar phantsi kwe-miniature yevidiyo Ubuchwepheshe Stack Isixhobo Programming: TypeScript Izixhobo zeData: ScyllaDB Umgangatho: NextJS (i-pages router) Izixhobo ze-Component: Material_UI Ukusebenzisa i-ScyllaDB kwi-low-latency video streaming applications ScyllaDB yi-database ye-NoSQL ye-low-latency kunye ne-high-performance efumaneka ne-Apache Cassandra kunye ne-DynamoDB. I-ScyllaDB iyatholakala kakuhle ukulawula iimfuno ze-storage ye-data kunye ne-recovery ye-video streaming applications. ScyllaDB ine-drivers kwiilwimi ze-programming ezininzi ezidumileyo kwaye, njengoko le nkqubo yesampuli ibonise, ibonelela kakuhle ne-modern web development frameworks ezifana ne-NextJS. I-Low latency kwinkqubo ye-streaming yeevidiyo ibalulekile yokufumana i-user experience efanelekileyo. Ukwenza isakhiwo se-high-performance, kufuneka uqhagamshele i-data model efanelekileyo iimfuno zakho. Siza kuxhomekeke kwinkqubo ye-example data modeling ukuze ubone njani. Ividiyo ye-streaming ye-app ye-data modeling Kwimeko , sifundisa ukuba i-NoSQL data modeling kufuneka kuqala ngokuzenzekelayo kwi-application yakho kunye neengxaki. Emva koko uqhuba ngokugqithisileyo kwaye uqhagamshelane neengxaki ezijoliswe kwi-app yakho. Le nqubo ibonelela ukuba uqhagamshelane neengxaki yakho kunye neengxaki zakho. I-ScyllaDB University I-Data Modeling Course Nangona kunjalo, siza kuxhomekeke kwiingxaki ukuba i-app yethu ye-streaming yevidiyo kufuneka isebenze ngalinye isithuba se-page! Page: Qhagamshelana nathi Kule nqaku, unokufumana iividiyo ezininzi ezidlulileyo ezivela ukubonisa. Le ukubonisa kubandakanya i-miniature yevidiyo kunye ne-progress bar phantsi kwe-miniature. 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) ); Kule isibuyekezo, kunokwenzeka ukucacisa 'user_id' njenge key partition ngenxa yokuba lo ifilimu sisetyenziswa ukucacisa i-watch history table. Qinisekisa ukuba le schema ingaba kufuneka ifakwe ngexesha elandelayo ukuba kukho isibuyekezo enokufuneka ukucaciswa kwiisombululo ezininzi ngaphezu kwe 'user_id'. Nangona kunjalo, le scheme ilawulwa kwisibuyekezo ebonakalayo. Ukongezelela kwinqanaba le-progress, le app kufuneka ukuthatha i-metadata efanelekileyo yeevidiyo ye- (isib. I-title kunye ne-miniature image). Ngokwenza oku, i-table 'video' kufuneka ifumanwe. Query – get video metadata: SELECT * FROM video WHERE id IN ?; Qaphela ukuba usebenzisa i-operator "IN" kwaye ayikho "=" ngenxa yokuba kufuneka ukufumana iividiyo ezininzi kunokuba iividiyo elinye. 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) ); Kwimibhodi yevidiyo, thina ukulawula 'id' njenge-partition key ngenxa yokuba oku kuphela ifilimu esetyenziswa kwifowuni. Iwebhusayithi: Watch Video Ukuba uxhumane kwi-button ye-"Watch", ziya kubhalwe kwiphepha kunye ne-videoplayer apho zinokufunda kunye nokufutshana ividiyo. Query – get video content: SELECT * FROM video WHERE id = ?; Kuyinto isibuyekezo ezininzi efana nesibuyekezo esebenzayo kwi-Continue Watching page. Ngoko ke, le nkqubo efanayo uya kukusebenza kakuhle kule isibuyekezo kunye. 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) ); Iwebhusayithi: Ividiyo ezidlulileyo Okugqibela, nceda siqonde kwi-Most Recent Videos page, nto leyo le sayithi yokuqala ye-application. Thina usebenzise le sayithi lokugqibela ngenxa yokuba yinto engqongileyo ukusuka kwindawo ye-data modeling. Le sayithi ibonisa iividiyo ezisixhenxe ezidlulileyo ezidlulileyo ezibonakalayo kwi-database efumaneka ngexesha lokuvelisa ividiyo. Uya kufuneka ukufumana iividiyo ezimbini: Okokuqala ukufumana i-timestamps, ke ukufumana i-content ye-video. Query – get the most recent ten videos’ timestamp: SELECT id, top10(created_at) AS date FROM recent_videos; Uyakwazi ukufumana ukuba usebenzise i-custom function ebizwa ngokuthi `top10()`. Oku ayikho i-standard function in ScyllaDB. Kuyinto i-UDF ( ) ukuba siye yasungulwa ukhuseleko le data modeling ingxaki. Le nkqubo ibonelela i-array ye 'created_at' timestamps ezidlulileyo kwi-table. kunokuba yindlela elungileyo yokuphendula iingxaki zakho ze-data modeling. Izixhobo ze-user-defined Ukwenza i-UDF entsha kwi-ScyllaDB Zezinto ze-timestamp zingasetyenziswa ukufumana i-content ye-video efanelekileyo ezibonakalayo kwi-page. 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); Kwiividiyo ezidlulileyo ezibonakalayo, i-column 'created_at' yi-key yokuqala ngenxa yokufilisha kuleli kwisisombululo yethu yokuqala ukuze ufumane iindleko ze-timestamp ezidlulileyo. Qinisekisa ukuba kwimeko ezininzi, oku kunokukwazi . Ukuhlaziywa Ukongezelela, i-UI ibonisa kwakhona i-progress bar elincane phantsi kwe-miniature yeevidiyo yaye ibonisa i-progress esebenzayo ukudlala leevidiyo. Ukuze ufumane le ixabiso kwiividiyo ngamnye, i-app kufuneka ibhalisele kwi-table 'watch history'. 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) ); Uyakwazi ukufumana ukuba ithebula ye-watch history isetyenziswe kwizicelo ezidlulileyo ukufumana idatha. Ngoku, i-schema kufuneka ifakwe ngokunyanisekileyo ukuze ifumaneke le isibhozo. Thina siphinde 'video_id' njenge-key ye-clustering. Ngokwenza oku, isibhozo yokufumana i-watch progress iya kusebenza ngokufanelekileyo. Yintoni. Ngoku nqakraza i-database scheme yokuqala! Uhlobo lokugqibela le database 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) ); I-User-defined function for the Most Recent Videos page -- 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; Yintoni Kwakhona ungenza Ukuvelisa ifunyenwe sicela ukuvelisa i-UDF kwiifayile ye-scylla.yaml (ukufaka: /etc/scylla/scylla.yaml): UDF usebenzisa Lua ukusetyenziswa kwe-Wasm ukuvelisa i-UDF kwi-ScyllaDB I-Clone ye-repo kwaye uqala! Ukuqala ... I-Clone ye-Repository git clone https://github.com/scylladb/video-streaming https://github.com/scylladb/video-streaming Ukufaka iingxaki: npm install Ukuguqulwa kwifayile ye-configuration: APP_BASE_URL="http://localhost:8000" SCYLLA_HOSTS="172.17.0.2" SCYLLA_USER="scylla" SCYLLA_PASSWD="xxxxx" SCYLLA_KEYSPACE="streaming" SCYLLA_DATACENTER="datacenter1" Ukuguqula i-database kunye nokufaka iinkcukacha ze-sample: npm run migrate Ukusebenza kwi-server: npm run dev Ukubala Uyakwazi ukufumana i-app yethu ye-streaming yevidiyo kwaye inokunceda ukwakha izicelo ze-low latency kunye ne-high-performance kunye ne-ScyllaDB. Ukuba ufuna ukugcina ukufundisa, nqakraza apho sinayo izifundo ezamahala Ukucinga , kunye nokuninzi! Ukuba unemibuzo malunga ne-video streaming sample app okanye i-ScyllaDB, Nceda siphile! IYunivesithi ScyllaDB Iimodeli zeData ScyllaDB umqhubi Qhagamshelana nathi Zonke iinkcukacha ezininzi ze-ScyllaDB: Ukucinga - IOT I-Cloud Getting Started Guide Ukucaciswa Izixhobo ezifanelekileyo: Ividiyo ye-streaming ye-app ye-GitHub repository UDFs kwi ScyllaDB Yintoni i-ScyllaDB Aggregates ye-Distributed Ukunciphisa Ixesha le-Query Execution ngexesha le-20X Wasmtime: Ukusekela i-UDFs kwi-ScyllaDB nge-WebAssembly ScyllaDB Ukucaciswa ScyllaDB ukuqala ScyllaDB ukuqala I-Attila Tóth Umbhali we-developer e-ScyllaDB. Ubhali ama-tutorials kunye neengxelo zebhulogi, uqhagamshelane kwiziganeko, uqhagamshelane ama-demo kunye ne-sample-applications eziza kuholele abathengi ukwakha i-applications ze-high performance. U-Attila Tóth