We created a new video streaming app to help you learn about ScyllaDB. This blog covers its features, tech stack, and data modeling. Бид зүгээр л шинэ ScyllaDB дээж апп, видео streaming апп хуваалцах. Энэ блог нь видео streaming програмын онцлог, технологийн багц, өгөгдлийн загварын үйл явцыг хамардаг. GitHub дээр боломжтой Видео streaming app онцлог Апп нь хамгийн чухал видео streaming програм хангамжийн онцлог нь минимал дизайн байна: Бүх видеонууд жагсаалт, үүсгэх огноо (хамгийн алдартай хуудас) Видеоны жагсаалт Та үзэх эхэлсэн Видео үзэх Насанд хүрэгчдэд зориулсан видеог үзнэ үү Бүтээгдэхүүний ширээний дэлгэц үзнэ үү Технологийн Stack Програм хангамжийн хэл: TypeScript Базар: ScyllaDB Загвар: NextJS (Pages Router) Барааны библиотека: Material_UI ScyllaDB-ийг Low-Latency Video Streaming програмуудыг ашиглах ScyllaDB нь Apache Cassandra болон DynamoDB-тэй нийцтэй бага давтамжтай, өндөр хүчин чадалтай NoSQL мэдээллийн сан юм. Энэ нь видео streaming програм хангамжийн өргөн хүрээний өгөгдлийн хадгалах, олборлох шаардлагаг хангахын тулд сайн тохиромжтой. ScyllaDB нь алдартай програм хангамжийн хэлбэрийн драйверүүдтэй бөгөөд энэ дээврийн програм хангамж нь NextJS гэх мэт орчин үеийн вэб хөгжүүлэлтэд тохиромжтой байдаг. Видео streaming үйлчилгээний талаар бага латент нь зөөлөн хэрэглэгчийн туршлага хангахын тулд чухал юм. Өндөр хүчин чадалтай суурилуулахын тулд таны хэрэгцээг тохиромжтой өгөгдлийн загвар боловсруулах хэрэгтэй. Хэрэв та үүнийг харахын тулд өгөгдлийн загвар боловсруулах үйл явцыг үзнэ үү. Видео Streaming програм хангамжийн мэдээллийн загвар Энэ нь , бид NoSQL-ийн өгөгдлийн загвар хийх нь үргэлж таны хэрэглээ болон асуулт эхлэн эхлэх ёстой. Дараа нь таны асуултуудад тохиромжтой, таны шаардлагад тохиромжтой өгөгдлийн загвар бий болгохын тулд энэ үйл явц. ScyllaDB их сургууль Data Modeling курс Эдгээр тухайд, бидний видео streaming апп-ийн бүх хуудсууд дээр ажиллуулах хэрэгтэй асуултуудыг унших! Page: Өнгөрсөн үзэх Энэ хуудсууд дээр та тэдний үзэх эхэлсэн бүх видеог жагсаалж болно. Энэ үзүүлэлт нь видео нэхмэл болон нэхмэл нэхмэл доорх прогресс бар агуулдаг. 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" -ийг хуваалцны түлхүүр болгон тодорхойлохыг хүсч байна, учир нь энэ нь асуултанд ашигладаг нэг шүүлтүүр юм. Page: Видео үзэх Хэрэв та "Хуваалцах" бутлуудыг дарна уу, энэ нь видео тоглуулагчтай хуудсууд руу дамжуулах болно. 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) ); Page: Хамгийн сүүлийн үеийн видео Эцэст нь, бид хэрэглээний эхний хуудас юм хамгийн сүүлийн үеийн Видео хуудсууд хуудсууд хамарна. Бид энэ хуудсууд хамгийн сөрөг нэг нь өгөгдлийн загварын үзүүлэлтээс байна. Энэ хуудсууд нь видео үүсгэх огноо орно багийн боломжтой хамгийн сүүлийн үеийн хуудсууд 10 жагсаалт байна. Бид эдгээр видеог хоёр шатанд олж авах ёстой: эхлээд цаг хугацааны жагсаалтыг олж авах, дараа нь үнэхээр видео агуулгыг олж авах. Query – get the most recent ten videos’ timestamp: SELECT id, top10(created_at) AS date FROM recent_videos; Хэрэв та харж байгаа бол бид өөрчилсөн функцийг "top10()" гэж нэрлэдэг. Энэ нь ScyllaDB-д стандарт функц биш юм. Энэ нь UDF ( Энэ функц нь тавтай морилноор хамгийн сүүлийн үеийн 'created_at' цаг хугацааны жагсаалт цуглуулдаг. Энэ нь таны өвөрмөц өгөгдлийн загварыг шийдэх маш сайн арга юм. Хэрэглэгчийн тодорхойлолт 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 Үүнээс гадна, интерфэйсийн интерфэйс нь өөрсдийн видеог үзнэ үү. Энэ видеог үзнэ үү. Бүх видеод энэ үнэ цэнэг олж авахын тулд програмууд нь "харах түүх" тавтай морилно уу. 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 Scheme! Эдүүлбэр » Final 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 конфигурацийн файлын UDF-ийг идэвхжүүлэхийн тулд баталгаажуулахын тулд (залуу: /etc/scylla/scylla.yaml): UDF Lua ашигладаг ScyllaDB-д UDF-ийг үүсгэхийн тулд Wasm-ийг ашиглах Repo Clone болон эхэлнэ үү! Энэ нь эхлэх ... Клонийг хадгалах: git clone https://github.com/scylladb/video-streaming https://github.com/scylladb/video-streaming Тавтай морилно уу: npm install Конфигурацийн файлыг өөрчлөх: 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 Өнгөрсөн Бид танд манай видео streaming апп тавтай морилно уу, энэ нь ScyllaDB-тэй бага давтамж, өндөр хүчин чадалтай апп хөгжүүлэхэд туслах болно. Хэрэв та суралцахыг хүсэж байгаа бол, үзнэ үү Хэрэв бид үнэгүй курс байна Нөхцөл , болон илүү их! Хэрэв та видео streaming sample app эсвэл ScyllaDB талаар асуултуудтай бол, Хамгийн сүүлийн үеийн мэдээ! ScyllaDB их сургууль Бүтээгдэхүүний Model ScyllaDB драйвер Бидний форум руу Дэлгэрэнгүй ScyllaDB дээж хэрэглээ: Татаж авах - IOT Cloud getting started гарын авлага Бүтээгдэхүүний Албан ёсны ресурс: Видео streaming app GitHub репозиторын ScyllaDB дээр UDFs ScyllaDB Distributed Aggregates нь Query Execution Time-ийг 20X-ээс багасгах вэ? Wasmtime: WebAssembly нь ScyllaDB-д UDFs дэмждэг ScyllaDB баримтлал ScyllaDB эхлэх ScyllaDB эхлэх Аттила Тот ScyllaDB-д хөгжүүлэгчийн дэмжлэгч юм. Тэр нь туториал, блог бичлэгүүд бичдэг, үйл явдлыг хэлдэг, хөгжүүлэгчид өндөр гүйцэтгэлийн апп-ийг үүсгэхэд туслахын тулд демо-ийг үүсгэх, дээж апп-ийг үүсгэдэг. Тавтай мод