We created a new video streaming app to help you learn about ScyllaDB. This blog covers its features, tech stack, and data modeling. Biz yeni bir ScyllaDB sample app, video streaming app yayımladıq. Bu blog video streaming proqramının xüsusiyyətlərini, tech stack-u və data modelləşdirmə prosesini əhatə edir. GitHub vasitəsilə Video streaming proqramı Uygulamanın minimal dizaynı var və ən əsas video streaming proqramı xüsusiyyətləri var: Bütün videoların listəsi, yaradılış tarixinə görə sorğu-sual edilmişdir (Home page) Görməyə başladığınız videolar Videoya baxın Gördüyünüz videoya baxın Hər bir videonun altındakı progresiya barını göstər İstehsal Stack Programlama dili: TypeScript Etiket: ScyllaDB NextJS (Pages Router) - Page Router (Neftçi Router) Əsas səhifə > Material_UI Low-latency video streaming üçün ScyllaDB istifadə etmək ScyllaDB, Apache Cassandra və DynamoDB ilə uyğundur. video streaming proqramlarının böyük ölçüde data depolama və quraşdırma ehtiyaclarını başa vurmaq üçün yaxşıdır. ScyllaDB bütün popüler programlama dillərində sürücüləri var və bu nümunə proqramı göstərdiyinə görə, NextJS kimi modern web geliştirmə çerçevələri ilə yaxşı birləşdirir. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Video Streaming proqramı Şirkətdə “NoSQL data modeling”in hər zaman ilk olaraq istifadə və sorğu ilə başlamasıdır.Sonra geri qayıtmaq və app-da çalışmaq istədiyiniz sorğu bazarındakı şemayı yaratmaq lazımdır. ScyllaDB Universitetinin Data Modeling kursu Bu fikrinə görə, video streaming appumuzun hər bir sayfa yükləməsində çalışması lazım olan sorğuların üzərində gedirik! Etiket: gözləmək Bu sayda, onların izləməyə başladıqları bütün videoları list edə bilərsiniz. 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) ); Bu sorğuda, "user_id"i bölüşmə anahtarı olaraq tanımlamanın anlamı vardır, çünki bu, saat tarixi tablosunu soruşmaq üçün istifadə etdiyimiz filtrdir. Bu şemanın "user_id"dan başqa sütunlarda filtrləşdirmə ehtiyacı olan bir sorğunun varsa, daha sonra güncellenməsinə ehtiyacı ola bilər. Hər bir videonun real metadata (təkcə, adı və miniatür görüntüsü) alınması lazımdır.Bu üçün, "video" tablosu soruşulmalıdır. Query – get video metadata: SELECT * FROM video WHERE id IN ?; “In” operatorunu “=” deyil, “in” operatorunu necə kullandığımızı gözləyin, çünki yalnız bir video deyil, bir video listasını almalıyıq. 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) ); Video tabelası üçün "id"i bölüşmə anahtarı olaraq tanımlayalım, çünki bu, sorğuda istifadə etdiyimiz tek filtrdir. Video: Video ilə baxın Əgər “Qiyamət” butonuna basarsanız, onlar videoya başlamaq və yerləşdirmək üçün bir video oynatıcı ilə bir sayfa çevriləcək. Query – get video content: SELECT * FROM video WHERE id = ?; Belə ki, bu problemin başlanğıcı ilə bağlı problemlər də həll olunacaq. 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) ); Əvvəlki: Ən çox video Son olaraq, ən son videolar sayını bölüşürük, bu, proqramın ana saytıdır. Biz bu sayını son olaraq analiz edirik, çünki bu, data modeling perspektifi ilə ən kompleksdir. Bu sayda video yaratma tarixi ilə sorğu-sual edilmiş database-də ən son yüklənənmiş 10 videosu list edir. Biz bu videoları iki adımda götürmək zorundayıq: ilk olaraq zamanlamaları alırıq, sonra real video içərisini alırıq. Query – get the most recent ten videos’ timestamp: SELECT id, top10(created_at) AS date FROM recent_videos; Bu barədə “Snickers” jurnalına istinadən xəbər verir ki, bu barədə “Snickers” jurnalında “Snickers” jurnalına istinadən xəbər verir. Bu funksiya tabloun ən son "created_at" zaman ştamplarının bir rolu qaytarır. Bu, özünüzü birləşdirmək üçün böyük bir problemdir. Kullanıcı definisiya funksiyası ScyllaDB-də yeni bir UDF yaratmaq Bu zaman etirafı qiymətləri sonra sayda göstərmək istədiyimiz fakt video içərini soruşmaq üçün istifadə edilə bilər. 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); Sonrakı videolarda “created_at” söhbətində, “created_at” söhbətində, biz ilk sorğumuzda bu söhbətdə filtre edirik ki, ən son zaman şifrələri əldə edəcəyik. . Sıx bölüşmə VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. 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) ); Əvvəlki məqalədə “Müsəlmanlar”ın “Müsəlmanlar”, “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar”ın “Müsəlmanlar Belə ki, görək, sonuncu database şemasını görək! Final Database xəritədə 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) ); Ən son video saytı üçün istifadəçi definisiya funksiyası -- 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; Bu Siz də edə bilərsiniz VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsil edən siyasi partiyanın adının qısaltması kimi bilinir. “Luna” ilə işləyir ScyllaDB-də UDF-lər yaratmaq üçün Wasm istifadə edin Reytinqə başlayın və başlayın! Başlamaq üçün... Repository-dən istifadə etmək üçün: git clone https://github.com/scylladb/video-streaming https://github.com/scylladb/video-streaming Bağımlılıqları təmin etmək: npm install Konfigurasiya dosyasının dəyişdirilməsi: APP_BASE_URL="http://localhost:8000" SCYLLA_HOSTS="172.17.0.2" SCYLLA_USER="scylla" SCYLLA_PASSWD="xxxxx" SCYLLA_KEYSPACE="streaming" SCYLLA_DATACENTER="datacenter1" Database-ni migratlaşdırın və sample data daxil edin: npm run migrate Serverdən istifadə edin: npm run dev Yuxarı qaçmaq Ümid edirik ki, videonuzun sürətləndirilməsini sevirsiniz və bu, ScyllaDB ilə düşük latensiya və yüksək performanslı proqramlar yaratmanıza kömək edər. Növbəti kurslarda özümüzü və Əgər sizə “Skype” və ya “Skype” ilə bağlı sorğu varsa, Biz də danışıqlar aparırıq! ScyllaDB Universitetində Data modelləri ScyllaDB sürücüləri Forumumuza gəlin Daha çox ScyllaDB sample proqramları: Əsas səhifə - IoT Qazaxıstanın baş məşqçisi Fikirlər Store Relevant resurslar : GitHub repository - GitHub repository ScyllaDB haqqında ScyllaDB-nin dağılımlı agregatları sorğu sürətini 20 dəfə azaldır WebAssembly ilə ScyllaDB-də UDF-ləri destekləmək ScyllaDB dokumentasiyası “ScyllaDB” start verəcək “ScyllaDB” start verəcək Attila Tóth haqqında ScyllaDB-də geliştiricilər üçün danışıqlar yazır, blog postları yazır, hadisələrdə danışır, demolar yaratır və istifadəçilərin yüksək performanslı proqramlar yaratmasına kömək edir. Atilla Əhmədov