雲開發常用資料結構設計剖析丨雲開發101
雲開發常用資料結構設計
在使用雲開發進行產品開發的時候,我們常常需要思考,我們的應用的資料結構應該如何設計,今天我們來看一些在進行應用開發時常見的一些場景的資料結構,來幫助你更好的理解雲開發,以及不同場景下雲開發的應用。
場景一:使用者個人資訊表
功能:判斷使用者是否註冊/留存使用者資訊以備查詢
在絕大多數場景下,使用者資訊都是我們需要儲存的資訊,或者我們需要判斷一個使用者是否註冊時,我們會使用使用者個人資訊表來做判斷。這個時候,我們可以藉助使用者個人資訊表來完成功能。
在完成這部分功能時,我們需要建立一個名為 profiles
的集合,用於儲存使用者的資訊,同時,我們需要將 profiles 集合設定為僅建立者可讀寫,這樣可以確保後續我們功能可以實現。
判斷使用者是否註冊
由於我們將 profiles
集合設定為僅建立者可讀寫,因此,當用戶在執行資料查詢時,僅能查到自己建立的資料,因此,當我們需要實現判斷使用者是否註冊時,只需要對集合內的資料進行查詢,便可知道使用者是否建立過資料。
基於這樣的機制,我們可以讓使用者在註冊時在 profiles
表中建立一個數據,這樣在後續判斷使用者是否註冊時,只需要查詢是否建立資料,便可以知道使用者是否已經註冊。
這裡我們舉個例子,當資料庫中有 _openid
分別為 aa
、bb
、cc
的三條記錄,如果當前使用者的 openId 為 aa,則它執行 db.collection('profiles').count()
db.collection('profiles').count()
時,得到的結果是0。
對於結果為 1 的,就視為該使用者已經註冊;對於結果為 0 的,就視為該使用者未註冊。
新使用者註冊時的操作
由於我們是基於 count 的結果來判斷使用者是否註冊,因此,就要求我們在完成使用者註冊(獲取使用者基本資訊,如頭像、暱稱)時,在 profiles
表中新增一個數據,從而用於後續的判斷。
則在開發時,我們需要注意,在使用 getUserInfo 相關的元件和介面完成資料的獲取後,我們需要在 profiles
Page({
bindGetUserInfo:function(userInfo){
const db = wx.cloud.database()
db.collection('profiles').count().then(res => {
if (res.total === 0){
db.collection('profiles').add({
data:userInfo
}).then(res => {
// 完成資料新增,即,完成註冊的步驟
})
}
})
}
})
這樣我們就完成判斷使用者註冊的最核心的部分,你如果需要在自己的應用中判斷使用者是否已經完成註冊的流程,可以藉助這樣的方式,完成這部分的需求。
場景二:文章/視訊/內容表
一般來說,我們的小程式中會或多或少加入一些內容方面的內容,有的是由官方釋出的,有的是由使用者釋出的,根據釋出者的不同,我們可以設計兩種不同的表結構
僅能由官方釋出的內容/文章/視訊
對於僅限於官方釋出的,我們可以考慮建立一個集合,名為 contents
,並將其許可權設定為僅管理端可寫,其他人可讀,這樣我們所新增的資料僅能在雲函式中進行修改,而不能在小程式由普通使用者修改,這樣就可以確保我們的資料的修改必須經過雲函式的確認,在雲函式中,我們可以進行許可權的判斷,比如,某幾個特定的人有許可權修改資料。
由使用者釋出的內容/文章/視訊
對於一些 UGC 的應用,我們需要使用者產生內容時,可以考慮建立一個集合,名為 contents
,並將其許可權設定為僅建立者可寫,所有人可讀,這樣就可以實現使用者自行釋出的內容,可以被其他所有使用者檢視。同時,資料的建立者可以對資料進行修改。
場景三:使用者評論表
當我們涉及到一些內容時,就常常會涉及到使用者的評論的功能,在進行開發時,評論的存放位置也會讓很多人迷茫,到底應該將評論放在文章的子級,還是要放在一個單獨的集合中?
這一部分關鍵在於:
- 你是否有需求將所有的評論進行排序等操作
- 你是否有需求在使用者個人的資訊中顯示其所有評論
如果你有上述兩個中任何一個或多個需求,那麼你都需要新建一個 collection,將所有評論都放在集合中,並將其對應的內容的 _id 放在評論中,用以後續的查詢。
如果你沒有上述需求,則可以考慮將評論放在文章/視訊條目中的子屬性中,隨著文章/視訊一同查詢出來。
總結
這篇文章我們分享了一些常見場景下的資料庫結構設計,如果你還對其他場景下的資料庫結構設計不慎明瞭,可以在文章下方留言,我們後續更新文章來說明。
如果你想要了解更多關於雲開發CloudBase相關的技術故事/技術實戰經驗,請掃碼關注【騰訊云云開發】公眾號~
相關推薦
雲開發常用資料結構設計剖析丨雲開發101
雲開發常用資料結構設計 在使用雲開發進行產品開發的時候,我們常常需要思考,我們的應用的資料結構應該如何設計,今天我們來看一些在進行應用開發時常見的一些場景的資料結構,來幫助你更好的理解雲開發,以及不同場景下雲開發的應用。 場景一:使用者個人資訊表 功能:判斷使用者是否註冊/留存使用者資訊以備查詢 在絕大多數場
幾張動態圖捋清Java常用資料結構及其設計原理
最近在整理資料結構方面的知識, 系統化看了下Java中常用資料結構, 突發奇想用動畫來繪製資料流轉過程. 主要基於jdk8, 可能會有些特性與jdk7之前不相同, 例如LinkedList LinkedHashMap中的雙向連結串列不再是迴環的. HashMap中的單鏈表是尾插,
主機管理+堡壘機系統開發:表結構設計
bsp http __str__ ipaddress color user del splay group 一、創建django項目和app web 二、主機表 1、主機表代碼: """存儲所有主機""" hostname = models.CharFi
Java常用資料結構之List
JDK 11正式釋出了,Oracle終於出了一個長期維護版本,應該將是繼JDK 8之後的一個常規使用版本。 前言 作為Java系開發者對Java集合類的使用應該是較為頻繁的,也是面試中經常會被問的問題。一直想整理一下Java集合和Android中的優化集合類,借這次機會
【python】入門指南:常用資料結構
Python內建了三種高階資料結構:list,tuple,dict list:陣列,相同型別的元素組成的陣列 tuple:元組,相同型別的元素組成的陣列,但是這裡有限定條件(長度是固定的,並且值也是固定的,不能被改變) dict:字典,k-v結構的 list陣列 1,初始化和遍歷li
自定義資料結構設計JDBC連線池提高效能
// 後面貼上原始碼 之前寫一個小工具,發現了一個問題,發現部署到雲端計算上面,由於需要操作其他環境的資料庫,發現獲取66 175環境的獲取連線非常緩慢。 通過列印日誌,然後部署到伺服器,發現獲取175環境的資料庫連線池居然要6s?? 獲取66環境需
Python3常用資料結構及方法介紹(三)——字串
三.字串 特點:不可更改 1.基本操作(同其他序列) ①索引 >>> 'python'[2] 't' ②分片 >>> 'beauty'[0:2] 'be' >>> 'beauty'[::2] 'bat' ③相加/相乘
Python3常用資料結構及方法介紹(二)——元組
二.元組 tuple 1特點: ①元組不可更改 ②圓括號 ③可重新賦值 >>> tuple0=(1,2,3) >>> tuple0=(2,3,4,1) >>> tuple0 (2, 3, 4, 1) 2常用元組操作(與列表類
Python3常用資料結構及方法介紹(一)——列表
一.列表 list 1特點: ①列表可更改 ②方括號 [1, 2, 3] 2常用列表操作: ①索引: >>> list1 = [1,2,3,4,5,6,7,8,9,10] >>> list1[4] 5 ②分片: >>>
Java常用資料結構之Set之TreeSet
前言 上篇文章我們分析了HashSet,它是基於HashMap實現的,那TreeSet會是怎麼實現的呢?沒錯!和大家想的一樣,它是基於TreeMap實現的。所以,TreeSet的原始碼也很簡單,主要還是理解TreeMap。 TreeSet的繼承關係 按照慣例,先來看TreeSet類的繼承關係: pub
《OpenCV3程式設計入門》——4.2 OpenCV中常用資料結構和函式(Point、Scalar、Size、Rect、cvtColor)
目錄 1、點的表示:Point類 2、顏色的表示:Scalar類 3、尺寸的表示:Size類 4、矩形的表示:Rect類 5、顏色空間轉換:cvtColor()函式 1、點的表示:Point類 Point類資料結構表示了二維座標系下的點,即由影象座標x和y指定的2D點
42、生鮮電商平臺-商品的spu和sku資料結構設計與架構
說明:Java開源生鮮電商平臺中商品的spu和sku資料結構設計與架構,包括資料庫圖示與架構分析。 1. 先說明幾個概念. 電商網站採用在商品模組,常採用spu+sku的資料結構演算法,這種演算法可以將商品的屬性和商品的基本資訊分離,分開維護,這樣我們就可以在不同的類目下自
SPL的常用資料結構(2)
SPL的常用資料結構--概念 ·什麼是資料結構 -資料結構是計算機儲存、組織資料的方式。資料結構是相互之間存在一種或多種特定關係的資料元素的結合。 -解決的是軟體開發過程中的資料如何儲存和表示的問題。·新浪微博裡面某個使用者的資料怎麼存? 舉例: ====》
[OpenCV3程式設計入門讀書筆記]常用資料結構和函式(3)
點的表示:Point類 //第一種表示方式 Point point; point.x = 10; point.y = 8; //第二種表示方式 Point point = Point(10,8); 顏色的表示:Scalar類 特別注意OopenCV裡面不是RGB,是BGR,所以下面的a
常用資料結構思維:遞推及其寫法
作為小白,我看到遞迴程式只是能看懂,但是自己寫不出來,我知道要有一個臨界條件(這個並不難找),但我不知道怎麼演進,這讓我十分頭疼,因此找到了一篇個人認為寫的不錯的文章如下,根據我對遞迴的理解和疑問對原文做了一些標註,歡迎各位大佬,寫下自己對遞迴的理解,本小白感激不盡。
常用資料結構思維:分治、動態規劃、貪心、回溯、分支限界
分治:把一個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併 http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html#30
常用資料結構總結(基於C++)
棧(stack) 簡介 棧是一種只能在一端進行插入或者刪除操作的線性表。其中允許進行插入或者刪除操作的一端稱為棧頂。棧的插入和刪除一般叫入棧和出棧。棧的順序儲存結構叫做順序棧,棧的鏈式儲存結構叫做鏈棧。 C++中棧的標頭檔案為<stack> 宣告 stack<資
自考-資料結構導論和資訊系統開發與管理
這次在自考中,感覺很棒。 自考討論小組:郭倩,李光、趙芬、劉玉彬、王東興和蘇超凡,最後再加上我。中間還有穿插,包括慧穎加入了一陣討論資料結構導論,還有在背資訊系統開發與管理的時候,加入了娉哲和怡仙她們的小組。感謝每一個人給我的幫助,最感謝的是組長郭倩了,很照顧人,給我們帶好吃的,而且在考前的
常用資料結構與演算法時間複雜度求解
1.0 資料結構的相關概念 2.0 一些基本演算法的時間複雜度 O(1): int x=1; O(n): for(int i = 0; i < n; i++){ printf("%d",i); } O(lo
java常用資料結構基礎知識總結(二)
在上一篇中,和大家交流了java常用資料結構的基礎知識。現在與大家分享各類資料結構的遍歷問題、轉換問題。 一、遍歷問題 (1) List的遍歷問題(以ArrayList為例) ①通過迭代器遍歷 public static void traverseArr