We created a new video streaming app to help you learn about ScyllaDB. This blog covers its features, tech stack, and data modeling. Մենք պարզապես գրել ենք նոր ScyllaDB նմուշ ծրագրը, տեսանյութի պրեմիման ծրագրը. Այս բլոգը ներառում է տեսանյութի ռեժիմացման ծրագրի առանձնահատկությունները, տեխնոլոգիաների բաղադրիչները եւ բաղադրում է տվյալների մոդելացման գործընթացը: GitHub-ում հասանելի է Video Streaming App- ի հատկանիշները Ապրանքը ունի փոքր դիզայնը ամենամեծ բնական տեսանյութի պրեմիման ծրագրային առանձնահատկություններով: Նկարագրեք բոլոր տեսանյութերը, սերտիֆիկացված ստեղծման օրվա վրա (Home page) Տեսանյութեր, որոնք դուք սկսել եք տեսնել տեսանյութ Տեսեք տեսանյութը, որտեղ դուք չգիտել եք Ցուցադրեք Progress Bar- ում ամեն տեսանյութի բաղադրիչը տեխնոլոգիան Stack Ծրագրման լեզուներ: TypeScript Տեղադրիչ: ScyllaDB NextJS (Pages Router) սարքավորումներ Հիմնական հոդված՝ Material_UI ScyllaDB- ի օգտագործումը ցածր վիդեո բեռնելի ծրագրերի համար ScyllaDB- ը մի ցածր տեւողության եւ բարձր կատարման NoSQL բազան է, որը համատեղելի է Apache Cassandra- ի եւ DynamoDB- ի հետ: Այն լավ հարմար է բուժել video streaming ծրագրերի մեծ քանակի տվյալների մատակարարման եւ վերցնելի պահանջները: ScyllaDB-ը ունի սերտիֆիկներ բոլոր հայտնի ծրագրային լեզուների համար եւ, ինչպես այս մոդելային ծրագրի ցույց է տալիս, այն լավ ներառում է modern web development frameworks- ի հետ, ինչպիսիք են NextJS- ը: Բարձր ճշգրիտությունը տեսանյութերի պրեմիման ծառայություններում կարեւոր է սեղմվող օգտագործող փորձի ապահովման համար: Բարձր կատարման համար, դուք պետք է նախագծեք տվյալների մոդել, որը ճշգրիտ է ձեր պահանջներին: Տեսեք, թե ինչ է այն տեսնում. Video streaming app- ի տվյալների մոդելում Ահա որ , մենք սովորում ենք, որ NoSQL տվյալների մոդելացման պետք է միշտ սկսվում է ձեր ծրագրի եւ հարցերի առաջին. Այնուհետեւ դուք աշխատում եք վերադառնալով եւ ստեղծել սմարթը հիմնված է հարցերի, որոնք դուք ցանկանում եք կատարել ձեր ծրագրում. Այս գործընթացը ապահովում է, որ դուք ստեղծեք տվյալների մոդել, որը ճշգրիտ է ձեր հարցերի եւ ճշգրիտ է ձեր պահանջները. ScyllaDB համալսարանի տվյալների մոդելային դասընթացը Հիմնականում, խնդրում ենք վերցնել հարցերը, որոնք մեր տեսանյութի պրեմիման ծրագիրը պետք է կատարվի յուրաքանչյուր էջային բեռնելում: Գլխավոր էջ: Continue Watching Այս էջում, դուք կարող եք ցուցադրել բոլոր տեսանյութերը, որոնք նրանք սկսել են տեսնել. Այս տեսակը ներառում է տեսանյութերի քաղցկեղները եւ progress bar- ը քաղցկեղի տակ. 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) ); «User_id»-ը որոշել է «User_id»-ին, քանի որ այն է սխալը, որը մենք օգտագործում ենք սխալը, որը օգտագործվում է սխալը «User_id»-ի համար: Խնդրում ենք իմանալ, որ այս սխալը կարող է պետք է նորարարվել հետո, եթե կա հարցը, որը պահանջում է սխալը `User_id- ի միջոցով այլ սխալների համար: Այժմ, սակայն, այս սխալը ճիշտ է defined հարցի համար: Բացի արագության արժեքը, ծրագիրը պետք է ստանալ նաեւ յուրաքանչյուր տեսանյութի ճշգրիտ մա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա մա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա մա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա-տա Query – get video metadata: SELECT * FROM video WHERE id IN ?; Նշեք, թե ինչպես մենք օգտագործում ենք «IN» օպերատորը եւ ոչ «=», քանի որ մենք պետք է ստանալ տեսանյութերի ցուցակը, ոչ միայն մեկ տեսանյութը: 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) ); Տեսանյութի համար `id`-ը կարգավորենք միասին, քանի որ դա միասին սխալ է, որը մենք օգտագործում ենք հարցում: Գլխավոր էջ: Watch Video Եթե դուք սեղմեք ցանկացած «Հեղմեք» կոճակը, նրանք կարող են վերլուծվել վիդեո խաղացողի էջում, որտեղ նրանք կարող են սկսել եւ տեւել տեսանյութը: Query – get video content: SELECT * FROM video WHERE id = ?; Այս հարցը շատ նման է այն հարցին, որը աշխատում է Continue Watching էջում: Այնպես որ, նույն սմարթը աշխատում է նաեւ այս հարցի համար: 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) ); Գլխավոր էջ: Լավագույն Videos Այս էջը վերլուծում է այս էջը վերջին, քանի որ այն ամենամեծ է տվյալների մոդելային տեսանյութերի մասին: Այս էջը ցուցադրում է 10 վերջին վերլուծված տեսանյութեր, որոնք հասանելի են տեսանյութերի ստեղծման օրինակում: Մենք պետք է ստանալ այդ տեսանյութերը երկու քայլում: առաջինը ստանալ ժամանակագրերը, ապա ստանալ իրական տեսանյութը. Query – get the most recent ten videos’ timestamp: SELECT id, top10(created_at) AS date FROM recent_videos; Տեղադրեք, որ մենք օգտագործում ենք `top10()`- ի բնական գործառույթը: Սա ոչ մի ստանդարտ գործառույթ է ScyllaDB- ում: Դա UDF ( Այս գործառույթը վերցնում է վերջին `created_at` time stamps- ում տեքստի մեջ: Դա կարող է լինել մեծ ճանապարհ է լուծել ձեր միասնական տվյալների մոդելացման խնդիրները. User-defined գործառույթը Նոր UDF- ի ստեղծումը ScyllaDB- ում Այս ժամանակագրության արժեքները ապա կարող են օգտագործվել, որպեսզի հարցրեք իրական տեսանյութը, որը մենք ուզում ենք տեսնել էջում: 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); Հաջորդ տեսանյութում `created_at` սեղմիչը հիմնական սեղմիչ է, քանի որ մենք փաթեթավորում ենք այն սեղմիչը մեր առաջին փոստի համար, որպեսզի ստանալ վերջին ժամանակագրական արժեքները: Խնդրում ենք իմանալ, որ որոշ դեպքերում դա կարող է ստեղծել . Hot կատեգորիաներ Բացի այդ, UI-ը նաեւ ցույց է տալիս մի փոքր progress bar- ում, որը ցույց է տալիս ձեր տեսանյութը, որը տեսնում եք այս տեսանյութը: Եթե դուք ցանկանում եք ստանալ այս արժեքը յուրաքանչյուր տեսանյութի համար, app- ը պետք է հարցնել `բեռնել պատմության` տեքստը: 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) ); Դուք կարող եք իմանալ, որ ժամացույցի պատմության տեքստը արդեն օգտագործվել է նախորդ հարցում տվյալների վերցնելու համար. Այժմ այս անգամ սմարթը պետք է փոխվել մի քիչ այս հարցի համար: Ապրիշում `video_id`-ը ավելացրեք որպես բաղադրիչ սեղմիչ: Այսպիսով, հարցը, որը վերցնում է ժամացույցի առաջադեմը, աշխատում է ճշգրտությամբ: Ահա այն: Այժմ տեսնում ենք վերջնական բազան բազան բազանը! Final 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) ); User-defined function for the Most Recent Videos էջը -- 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; Այս Բայց դուք կարող եք նաեւ Օգտագործեք UDF- ները scylla.yaml konfiguration ֆայլում: UDF-ը օգտագործում է Lua Օգտագործեք Wasm- ը ScyllaDB- ում ստեղծելու համար Պահպանեք Repo եւ սկսեք! Ինչպե՞ս սկսել... Կառուցեք Repository: git clone https://github.com/scylladb/video-streaming https://github.com/scylladb/video-streaming Բարձրացնել սխալները: npm install 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" Տեղադրեք տվյալների բազան եւ ներբեռնել մոդելային տվյալները: npm run migrate Հեռնել սերվեր: npm run dev Բարձրացնել Մենք հավատում ենք, որ դուք սիրում եք մեր տեսանյութերի պրեմիման ծրագիրը, եւ դա օգնում է Ձեզ ստեղծել ցածր լարման եւ բարձր կատարման ծրագրեր ScyllaDB- ի հետ: Եթե դուք ցանկանում եք շարունակել ուսուցում, ստուգեք Երբ մենք ունենք անվճար դասընթացներ Հիմա Եթե դուք ունեք հարցեր տեսանյութերի պրեմիալ ծրագրի կամ ScyllaDB- ի մասին, Ահա մենք խոսում ենք! ScyllaDB համալսարան Data մոդել ScyllaDB Drivers- ը Գրեք մեր Forum-ը More ScyllaDB sample ծրագրեր: Հիմնական - IoT Cloud Getting Started Գլխավոր էջ Տեղադրություն Store Relevant գործառույթներ : GitHub վիդեո վիդեո վիդեո վիդեո ScyllaDB-ի մասին Ինչպե՞ս ScyllaDB Distributed Aggregates- ը կտրում է Query Execution Time- ը մինչեւ 20X Wasmtime- ը: ScyllaDB- ում UDF- ի աջակցությունը WebAssembly- ի հետ ScyllaDB գրասենյակ ScyllaDB-ը սկսվում է ScyllaDB-ը սկսվում է Attila Tóth-ի մասին ScyllaDB- ում աշխատում է Developer Advocate- ում: Նա գրում է դասընթացներ եւ բլոգներ, խոսում է պատմություններում, ստեղծում է Demo- ում եւ մոդել ծրագրեր, որոնք օգնում են Developer- ում ստեղծել բարձր կատարյալ ծրագրեր: Արդյոք