1. 程式人生 > >雲開發常用資料結構設計剖析丨雲開發101

雲開發常用資料結構設計剖析丨雲開發101

雲開發常用資料結構設計

在使用雲開發進行產品開發的時候,我們常常需要思考,我們的應用的資料結構應該如何設計,今天我們來看一些在進行應用開發時常見的一些場景的資料結構,來幫助你更好的理解雲開發,以及不同場景下雲開發的應用。

場景一:使用者個人資訊表

功能:判斷使用者是否註冊/留存使用者資訊以備查詢

在絕大多數場景下,使用者資訊都是我們需要儲存的資訊,或者我們需要判斷一個使用者是否註冊時,我們會使用使用者個人資訊表來做判斷。這個時候,我們可以藉助使用者個人資訊表來完成功能。

在完成這部分功能時,我們需要建立一個名為 profiles 的集合,用於儲存使用者的資訊,同時,我們需要將 profiles 集合設定為僅建立者可讀寫,這樣可以確保後續我們功能可以實現。

判斷使用者是否註冊

由於我們將 profiles 集合設定為僅建立者可讀寫,因此,當用戶在執行資料查詢時,僅能查到自己建立的資料,因此,當我們需要實現判斷使用者是否註冊時,只需要對集合內的資料進行查詢,便可知道使用者是否建立過資料。

基於這樣的機制,我們可以讓使用者在註冊時在 profiles 表中建立一個數據,這樣在後續判斷使用者是否註冊時,只需要查詢是否建立資料,便可以知道使用者是否已經註冊。

這裡我們舉個例子,當資料庫中有 _openid 分別為 aabbcc 的三條記錄,如果當前使用者的 openId 為 aa,則它執行 db.collection('profiles').count()

時,得到的結果是 1 ,則表示這個使用者已經註冊了。如果當前使用者的 openId 為 dd,因為許可權是僅能查詢自己建立的資料,因此,在執行 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 ,並將其許可權設定為僅建立者可寫,所有人可讀,這樣就可以實現使用者自行釋出的內容,可以被其他所有使用者檢視。同時,資料的建立者可以對資料進行修改。

場景三:使用者評論表

當我們涉及到一些內容時,就常常會涉及到使用者的評論的功能,在進行開發時,評論的存放位置也會讓很多人迷茫,到底應該將評論放在文章的子級,還是要放在一個單獨的集合中?

這一部分關鍵在於:

  1. 你是否有需求將所有的評論進行排序等操作
  2. 你是否有需求在使用者個人的資訊中顯示其所有評論

如果你有上述兩個中任何一個或多個需求,那麼你都需要新建一個 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