Cassandra是世界上經受住最多實戰考驗的數據庫,經過其快速且易於使用的數據API,讓你的程序開發升級。html
本文將介紹什麼是Stargate以及Stargate的最新進展,若是您想快速瀏覽相關代碼和動手操做指南,不妨直接跳到本文的第四節,跟着咱們一塊兒在App上發佈動態、建立頻道並管理用戶吧。node
這對開發者來講真是個超棒的時刻。數據庫
咱們將不少的API和很棒的工具集成在了一塊兒,幫助你們構建不斷變化的全棧應用程序。若是你是一個開發者,你可能在用無模式(schemaless)數據存儲、無服務器(serverless)架構、JSON的各類API,以及GraphQL語言等技術。npm
不只如此,還有不少很是棒的框架(好比Jamstack,即JavaScript、APIs和Markup)和服務(好比Netlify)讓無服務器應用程序的部署變得更快。瀏覽器
如今,因爲Stargate在Astra上做爲官方數據API正式發行,Apache Cassandra首次成爲了這個應用棧的一部分。服務器
咱們構建的現代應用程序須要各類數據API,咱們將這些API都集成到了咱們的工具包中,它們會和原生的數據格式(JSON、REST、GraphQL等)協同工做。這些數據API須要支持無模式的JSON,與此同時還要提供速度和伸縮性。網絡
最重要的是,若是想要在咱們的項目中使用他們,咱們至多須要幾分鐘的時間而已。架構
DataStax將Stargate構建於Astra,這給做爲程序開發人員的咱們一個天然的數據API棧,它與Jamstack或你選擇的其它無服務器應用棧相容。app
Apache Cassandra助力於Netflix、Instagram、Yelp、iCloud以及其餘咱們每日都用的不少應用,而在Astra上的Stargate就是構建在這個基礎堅實的NoSQL數據引擎之上的。框架
Stargate是一個開源的數據網關,它處於你的程序服務器和你的數據庫之間。Stargate將一個API平臺和數據請求協調代碼放到同一個開源項目中。
多個成功的應用程序公司(像是Netflix和Yelp)都構建了他們本身的數據網關,以幫助內部的程序開發人員用各類簡單的API開發App功能,同時無需瞭解底層的數據庫或把數據模式(schema)弄得一團糟。
DataStax將Stargate集成到Astra中,讓你一樣可以輕鬆訪問你的數據。
這對你來講意味着什麼?
有Stargate做爲去往Cassandra的不一樣flavor的協調數據請求的代理,你能夠按你所想使用你的數據——不管是經過無模式Document API使用JSON,抑或是經過能感知數據庫模式的GraphQL和RESTful API使用JSON。
爲了在實戰中看看這個,讓咱們來研究一下如何在一個抖音的克隆版App中使用JSON和Stargate的無模式Document API。由於若是Instagram和Snapchat都有了克隆抖音而來的功能,咱們也應該要有一個,不是嗎?
在不需數據建模的狀況下將JSON隨意丟入Apache Cassandra或從中隨意取出是頗有意思的事情。你真應該本身在Astra上動手試一下。你能夠在Astra上馬上獲得動手體驗,或者你也能夠看看咱們的示例程序庫,瞭解一下實戰中的無模式Cassandra。
咱們很高興和來自Netflix、黑莓、麥格理銀行、美國聯合服務汽車協會以及Yelp的衆多工程師一塊兒創造Stargate。他們很努力地在對這些API進行實戰考驗,並與在咱們一塊兒開發新的功能。
好了就是這些,讓咱們開始寫代碼吧!
咱們打算用Astra上的Stargate提供的API來向抖音的克隆版App建立並上傳動態。在這個過程當中,咱們將會使用你能夠直接粘貼到你最新的Jamstack程序的代碼。
想要在你的應用程序中使用在Astra上的Stargate,首先請安裝並配置咱們的JavaScript SDK。你也許須要自行查詢一下如何在你的.env文件中存儲環境變量。
讓咱們先從一個基本的抖音動態開始——一個帶有簡短描述的視頻——就像是這樣:
const postData = { "postId": 0, "video": "https://i.imgur.com/FTBP02Y.mp4", "caption": "These ducks are cute", "timestamp": "2020-12-09T09:08:31.020Z", "likes": 0, }
當你用一個node JS客戶端鏈接到在Astra上的Stargate以後,讓咱們一塊兒在咱們的App中建立一個新的collection,並將剛纔的視頻動態加入其中:
const postsCollection = astraClient.namespace("tikTokClone").collection("posts"); const post = await postsCollection.create(postData);
若是你以前用過Cassandra,你會知道這一步有多棒。看看咱們剛纔省略的步驟吧:無需數據建模、無需建立新表、無需配置代碼、無需分區鍵、無需聚類鍵……我想你已經明白個人意思了。
在Astra上的Stargate讓你僅用一行代碼就能向Apache Cassandra中添加數據。這種程度的便捷是以前的Cassandra不可能作到的。插入JSON數據,而後繼續下一步。
下一步,假設你想要找到全部和鴨子(ducks)相關的動態,你能夠這樣作:
// find all posts about ducks const posts = await postsCollection.find({ caption: { $in: ["ducks"] } });
Duang~如今一個有關鴨子的頻道已經爲你的用戶找出來了。畢竟沒人不會喜歡一個專一於鴨鴨們的視頻頻道。
如今你的App看起來還不會和Twitter同樣,可是咱們能夠編輯一些內容。讓咱們看看如何編輯你的動態的簡短描述——或者是一個稍長的描述?這取決於你。
// update the post’s caption const post = await postsCollection.update(post.documentId, { caption: "These ducks are MEGA cute", });
上面的這些只是一個快速介紹,展現瞭如何在一個簡單地克隆抖音的App上調用一小部分的數據API。
想要知道所有的功能?用網頁瀏覽器搜索「Ania Kubow’s tutorial」查看來自Ania Kubow的視頻教程(適當配置網絡)。她展現瞭如何利用Netlify和這些功能來建構一個完整的React應用程序。
想要查看更多使用Stargate的REST、Document以及GraphQL的API的例子,點擊這裏查看更多動手教程。看看這些教程,而且記得告訴咱們你的想法。
有新的App的主意?或者想要加入咱們的狂歡?你能夠加入到咱們的Stargate社區中。
咱們很期待看到你是如何改造你的克隆版的抖音,使它擁有更多值得炫耀的基於數據的功能。
或者你能夠自行建立其餘App的克隆版——咱們會很樂意將你的App克隆版放到咱們的示例程序庫,因此請經過DataStax活動小祕書與咱們取得聯繫。
若是你看到這兒了,估計你是在找更多的代碼。
沒問題。
讓咱們展現一下如何建立node JS客戶端以及調用更多的數據API。對於初學者,讓咱們先看一下如何將你的客戶端鏈接到在Astra上的Stargate:
// npm install @astrajs/collections const { createClient } = require("@astrajs/collections"); // create an Astra client const astraClient = await createClient( { astraDatabaseId: process.env.ASTRA_DB_ID, astraDatabaseRegion: process.env.ASTRA_DB_REGION, username: process.env.ASTRA_DB_USERNAME, password: process.env.ASTRA_DB_PASSWORD, });
這很是之容易。
而後讓咱們在咱們的數據庫中建立一個用戶collection,用它來儲存咱們的抖音用戶的documents。
// create the users collection in the app const usersCollection = astraClient.namespace("tikTokClone").collection("users");
咱們的抖音App中的用戶會有一些基本信息:一個獨一無二的ID、一個名字、用戶名等等:
const userData = { "id_3": "0", "name": "Mo Farooq", "username": "mofarooq32", "avatar": "https://i.imgur.com/9KYq7VG.png" };
而後讓咱們把這個用戶添加到咱們的collection中:
// create a new user const user = await usersCollection.create(userData);
你能夠經過讀取這個用戶的任意特性(好比用戶名)來確保這個用戶已經被存儲在數據庫中了:
// find our user by username const users = await usersCollection.find({ username: { $eq: "mofarooq32" } });
或者你能夠根據用戶的documentId來查找任意用戶:
// get the user by document id const user = await usersCollection.get(user.documentId);
最後,若是你想要刪除一個用戶:
// delete the user const user = await usersCollection.delete(user.documentId);
想要查看完整代碼?用網頁瀏覽器搜索「Ania Kubow’s app」查看所有的代碼,並基於它改造你本身的版本。若是你真的這樣作了,記得讓咱們知道你的新動態,咱們很樂意訂閱你的鴨鴨頻道。
謝謝你讀完整篇文章。祝你敲代碼愉快!