• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • NoSQL 數據建模技術(4)

    發表于:2012-05-18來源:不祥作者:陳皓點擊數: 標簽:數據庫
    Composite Key Index 適用性: BigTable 數據庫。 (9) 鍵組合聚合 Aggregation with Composite Keys Composite keys 鍵組合技術并不僅僅可以用來做索引,同樣可以用來區分不用的

      Composite Key Index

      適用性: BigTable 數據庫。

      (9) 鍵組合聚合 Aggregation with Composite Keys

      Composite keys 鍵組合技術并不僅僅可以用來做索引,同樣可以用來區分不用的類型的數據以支持數據分組??紤]一個例子,我們有一個海量的日志數組,這個日志記錄了互聯網上的用戶的訪問來源。我們需要計算從某一網站過來的獨立訪客的數量,在關系型數據庫中,我們可能需要下面這樣的SQL查詢語句:

    1
    SELECT count(distinct(user_id)) FROM clicks GROUP BY site

      我們可以在NoSQL中建立如下的數據模型:

      Counting Unique Users using Composite Keys

      這樣,我們就可以把數據按UserID來排序,我們就可以很容易把同一個用戶的數據(一個用戶并不會產生太多的event)進行處理,去掉那些重復的站點(使用hash table或是別的什么)。另一個可選的技術是,我們可以對每一個用戶建立一個數據實體,然后把其站點來源追加到這個數據實體中,當然,這樣一來,數據的更新在性能相比之下會有一定損失。

      適用性: Ordered Key-Value Store 排序鍵值對數據庫, BigTable風格的數據庫。

      (10) 反轉搜索 Inverted Search – 直接聚合 Direct Aggregation

      這個技術更多的是數據處理技術,而不是數據建模技術。盡管如此,這個技術還是會影響數據模型。這個技術最主要的想法是使用一個索引來找到滿足某條件的數據,但是把數據聚合起需要使用全文搜索。還是讓我們來說一個示例。還是用上面那個例子,我們有很多的日志,其中包括互聯網用戶和他們的訪問來源。讓我們假定每條記錄都有一個UserID,還有用戶的種類 (Men, Women, Bloggers, 等),以及用戶所在的城市,和訪問過的站點。我們要干的事是,為每個用戶種類找到滿足某些條件(訪問源,所在城市,等)的的獨立用戶。

      很明顯,我們需要搜索那些滿足條件的用戶,如果我們使用反轉搜索,這會讓我們把這事干得很容易,如: {Category -> [user IDs]} 或 {Site -> [user IDs]}。使用這樣的索引, 我們可以取兩個或多個UserID要的交集或并集(這個事很容易干,而且可以干得很快,如果這些UserID是排好序的)。但是,我們要按用戶種類來生成報表會變得有點麻煩,因為我們用語句可能會像下面這樣

    1
    SELECT count(distinct(user_id)) ... GROUP BY category

      但這樣的SQL很沒有效率,因為category數據太多了。為了應對這個問題,我們可以建立一個直接索引 {UserID -> [Categories]} 然后我們用它來生成報表:

      Counting Unique Users using Inverse and Direct Indexes

      最后,我們需要明白,對每個UserID的隨機查詢是很沒有效率的。我們可以通過批查詢處理來解決這個問題。這意味著,對于一些用戶集,我們可以進行預處理(不同的查詢條件)。

      適用性: Key-Value Store 鍵值對數據庫, Document Databases文檔數據庫, BigTable風格的數據庫。

      層級式模型 Hierarchy Modeling Techniques

      (11) 樹形聚合Tree Aggregation

      樹形或是任意的圖(需反規格化)可以被直接打成一條記錄或文檔存放。

      當樹形結構被一次性取出時這會非常有效率(如:我們需要展示一個blog的樹形評論)

      搜索和任何存取這個實體都會存在問題。

      對于大多數NoSQL的實現來說,更新數據都是很不經濟的(相比起獨立結點來說)

      Tree Aggregation

      適用性: Key-Value 鍵值對數據庫, Document Databases 文檔數據庫

      (12) 鄰接列表 Adjacency Lists

      Adjacency Lists 鄰接列表是一種圖 – 每一個結點都是一個獨立的記錄,其包含了 所有的父結點或子結點。這樣,我們就可以通過給定的父或子結點來進行搜索。當然,我們需要通過hop查詢遍歷圖。這個技術在廣度和深度查詢,以及得到某個結點的子樹上沒有效率。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>