We created a new video streaming app to help you learn about ScyllaDB. This blog covers its features, tech stack, and data modeling. අපි just published a new ScyllaDB sample application, a video streaming app. මෙම බ්ලොග් අඩවිය වීඩියෝ ස්ට්රොයිම් යෙදුමයේ විශේෂාංග, තාක්ෂණය, සහ දත්ත ආකෘති ක්රියාවලිය බිඳ වැටේ. GitHub හි ලබා ගත හැකි වීඩියෝ Streaming App මෙම යෙදුම ඉතාම වැදගත් වීඩියෝ ස්ට්රොයිම් යෙදුම විශේෂාංග සමග සීමිත නිර්මාණයක් ඇත: සියලුම වීඩියෝ ලැයිස්තුව, නිර්මාණය දිනය අනුව සංසන්දනය කිරීම (පළමු පිටුව) ඔබ බැලීමට ආරම්භ කරන වීඩියෝ ලැයිස්තුව වීඩියෝ බලන්න ඔබ අතහැර ගිය වීඩියෝව දිගටම බලන්න සෑම වීඩියෝ දර්ශකයක් යටතේ දියුණුව පැකේජය පෙන්වන්න තාක්ෂණය Stack පරිගණක භාෂාව: TypeScript දත්ත සංකේතය: ScyllaDB NextJS (Pages Router) - පිටපත් රූටරය ද්රව්ය පුස්තකාලය: Material_UI Low-Latency Video Streaming Applications සඳහා ScyllaDB භාවිතා කිරීම ScyllaDB යනු Apache Cassandra සහ DynamoDB සමඟ අනුකූල වන අඩු පැතිරීම සහ උසස් කාර්ය සාධක සහිත NoSQL දත්ත පදනමකි.It is well suited to handle the large-scale data storage and retrieval requirements of video streaming applications.ScyllaDB has drivers in all the popular programming languages and, as this sample application demonstrates, it integrates well with modern web development frameworks such as NextJS. වීඩියෝ ස්ට්රොයිම් සේවා සකස් කිරීමෙන් අඩු ප්රවේශය නිශ්චිත පරිශීලක අත්දැකීම් ලබා දීම සඳහා ප්රධාන වේ. උසස් කාර්ය සාධනය සඳහා පදනම තැබීම සඳහා, ඔබ ඔබේ අවශ්යතා වලට ගැලපෙන දත්ත ආකෘතිය නිර්මාණය කළ යුතුය. Video Streaming App දත්ත ආකෘතිය ඒ අතරේ , අපි NoSQL දත්ත ආකෘති සෑම විටම ඔබගේ යෙදුම හා ප්රශ්න මුලින් ආරම්භ කළ යුතු බව අපි ඉගෙන ගනිමු.එවිට ඔබ පසුපස වැඩ හා ඔබගේ යෙදුම තුළ ක්රියාත්මක කිරීමට අවශ්ය ප්රශ්න මත පදනම්ව සැලැස්ම නිර්මාණය.මේ ක්රියාවලිය ඔබ ඔබේ ප්රශ්න වලට ගැලපෙන දත්ත ආකෘතිය සහ ඔබේ අවශ්යතා සපුරාලීමට සහතික කරයි. ScyllaDB විශ්ව විද්යාලයේ දත්ත ආකෘතිය පාඨමාලාව ඒ ගැන හිතන විට, අපගේ වීඩියෝ ස්ට්රොයිම් යෙදුම සෑම පිටුවකටම ක්රියාත්මක කළ යුතු ප්රශ්න වලට යන්න! Title: දිගටම බලන්න මෙම පිටුවේ, ඔබ ඔවුන් බැලීමට පටන් ගත් සියලු වීඩියෝ ලැයිස්තුගත කළ හැකිය.This view includes the video thumbnails and the progress bar under the thumbnail. 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' අංකය හැර වෙනත් කූඩුවලට ෆයිල්ටර් කිරීම අවශ් ය වන ප්රශ්නය තිබේ නම්. වර්ධනය අගය අමතරව, යෙදුම සෑම වීඩියෝවකටම සැබෑ මෙටා දත්ත (උදාහරණයක් ලෙස, මාතෘකාව සහ පුළුල් ඡායාරූපය) ලබා ගැනීමට අවශ්ය වේ. 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' අංකය බෙදාහැරීමේ යතුර ලෙස සකස් කරමු, මොකද එය ප්රශ්නය තුළ අප භාවිතා කරන එකම ෆයිල්ටර්ය. Title: වීඩියෝව බලන්න ඔබ ඕනෑම "බලන්න" බොත්තම මත ක්ලික් කළහොත්, ඔවුන් වීඩියෝ ක්රීඩකයා සමඟ පිටුවකට මාරු කරනු ඇත, එහිදී ඔවුන් වීඩියෝව ආරම්භ කළ හැකිය සහ නතර කළ හැකිය. Query – get video content: SELECT * FROM video WHERE id = ?; මෙම ප්රශ්නය දිගටම බලන්න පිටුව මත ක්රියාත්මක වන ප්රශ්නයකට ඉතා සමාන ය.මේ අනුව, එම පද්ධතිය මෙම ප්රශ්නය සඳහා හොඳින් ක්රියාත්මක වනු ඇත. 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) ); පිටුව: Most Recent Videos අවසාන වශයෙන්, අපි අයදුම්පත් මුල් පිටුව වන වඩාත් නවතම වීඩියෝ පිටුව බිඳ වැටෙනු ඇත.අපි මෙම පිටුව අවසාන ලෙස විශ්ලේෂණය කර ඇත, එය දත්ත ආකෘති දර්ශනයෙන් වඩාත් සංකීර්ණ වන නිසා.මේ පිටුව වීඩියෝ නිර්මාණය දිනය අනුව ඇණවුම් කරන ලද දත්තබස්වල ලබා ගත හැකි නවතම වීඩියෝ දහයක් ලැයිස්තුගත කරයි. අපි මෙම වීඩියෝව පියවර දෙකකින් ලබා ගත යුතුය: පළමුවෙන්ම කාල සීමාවන් ලබා ගන්න, පසුව සැබෑ වීඩියෝ අන්තර්ගතය ලබා ගන්න. Query – get the most recent ten videos’ timestamp: SELECT id, top10(created_at) AS date FROM recent_videos; ඒ නිසාම අපි පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර්ෆියුම් පර් ) අපි මෙම දත්ත ආකෘති ප්රශ්නය විසඳීමට නිර්මාණය කර ඇත.This function returns an array of the most recent `created_at` timestamps in the table. ඔබේ සුවිශේෂී දත්ත ආකෘති අභියෝග විසඳීමට හොඳ ක්රමයක් විය හැක. user-defined කාර්යය ScyllaDB හි නව UDF නිර්මාණය කිරීම මෙම කාල සීමාව වටිනාකම් පසුව පිටුවේ පෙන්වන්න අවශ්ය සැබෑ වීඩියෝ අන්තර්ගතය ප්රශ්නය කිරීමට භාවිතා කළ හැක. 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' කූඩුව ප්රධාන යතුරකි, මොකද අපි පළමු ප්රශ්නය තුළ එම කූඩුව අනුව ෆිල්ටර් කරමු. . උණුසුම Partition මීට අමතරව, UI සෑම වීඩියෝවකටම ඔබ එම වීඩියෝව බැලූ ප්රගතිය පෙන්වන්නේ සෑම වීඩියෝවකටම කුඩා ප්රගතිශීලීතා ලැයිස්තුවක් පෙන්වනු ලැබේ. 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' එකතු කරමු clustering key ලෙස. දැන් බලමු අන්තිම Database Scheme එක! අවසාන Database Scheme 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) ); අන්තිම වීඩියෝ පිටුව සඳහා පරිශීලක සංකේතය -- 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; මේ නමුත් ඔබටත් පුළුවන් scylla.yaml සැකසුම් ගොනුව තුළ UDFs ක්රියාත්මක කිරීමට වග බලා ගන්න (එය ස්ථානය: /etc/scylla/scylla.yaml): UDF Lua භාවිතා කරයි ScyllaDB හි UDFs නිර්මාණය කිරීම සඳහා Wasm භාවිතා කරන්න Repo Clone කරලා පටන් ගන්න! පටන් ගන්න... Repository එක Clone කරන්න: git clone https://github.com/scylladb/video-streaming https://github.com/scylladb/video-streaming ආකර්ෂණය ස්ථාපනය කරන්න: npm install Configuration File එක වෙනස් කරන්න: 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 විශ්වවිද් යාලය දත්ත ආකෘතිය ScyllaDB රියදුරු අපගේ Forum වෙත යන්න තවත් ScyllaDB උදාහරණ අයදුම්පත්: IOT - IOT Cloud Getting Started මාර්ගෝපදේශ විශේෂාංග Store අදාළ සම්පත් : GitHub repository - GitHub repository - GitHub repository - GitHub repository ScyllaDB හි UDFs ScyllaDB Distributed Aggregates 20x දක්වා Query Execution Time අඩු කරන්නේ කෙසේද Wasmtime: WebAssembly සමඟ ScyllaDB හි UDFs සහාය කිරීම ScyllaDB ලේඛන ScyllaDB ආරම්භ කරයි ScyllaDB ආරම්භ කරයි Attila Tóth ගැන ScyllaDB හි සංවර්ධක නියෝජිතයා ඔහු අධ්යයන ලිපි සහ බ්ලොග් සටහන් ලිවීම, සිදුවීම්වලදී කතා කිරීම, ප්රදර්ශන නිර්මාණය කිරීම සහ ආකෘති යෙදුම් නිර්මාණය කිරීම සඳහා සංවර්ධකයින් උසස් කාර්ය සාධක යෙදුම් ගොඩනැගීමට උපකාර කරයි. ආතල් ටොටෝ