1. 程式人生 > >架構-水平切分架構之基因法

架構-水平切分架構之基因法

業務:查詢使用者的所有帖子、查詢帖子詳情。

欄位:使用者ID、帖子ID。

普通水平切分:

  根據帖子ID切分則無法一次查詢使用者的所有帖子;
  根據使用者ID切分則需要先查帖子所屬使用者;

什麼是分庫基因?
  通過uid分庫,假設分為16個庫,採用uid%16的方式來進行資料庫路由,這裡的uid%16,其本質是uid的最後4個bit決定這行資料落在哪個庫上,這4個bit,就是分庫基因。

什麼是基因法分庫?
  

  如上圖所示,uid=666的使用者釋出了一條帖子(666的二進位制表示為:1010011010):
  使用uid%16分庫,決定這行資料要插入到哪個庫中
  分庫基因是uid的最後4個bit,即1010
  在生成tid時,先使用一種分散式ID生成演算法生成前60bit(上圖中綠色部分)
  將分庫基因加入到tid的最後4個bit(上圖中粉色部分)
  拼裝成最終的64bit帖子tid(上圖中藍色部分)

  這般,保證了同一個使用者釋出的所有帖子的tid,都落在同一個庫上,tid的最後4個bit都相同,於是:
    通過uid%16能夠定位到庫
    通過tid%16也能定位到庫

  全域性唯一ID也可以通過表自增位置和自增範圍實現,比如使用者ID雜湊為 1 的表,自增位置為1,自增範圍為 10。

相關推薦

架構-水平切分架構基因

業務:查詢使用者的所有帖子、查詢帖子詳情。 欄位:使用者ID、帖子ID。 普通水平切分:   根據帖子ID切分則無法一次查詢使用者的所有帖子;   根據使用者ID切分則需要先查帖子所屬使用者; 什麼是分庫基因?   通過uid分庫,假設分為16個庫,採用uid%16的

從使用者中心開始,聊“單KEY”類業務資料庫水平切分架構實踐

本文將以“使用者中心”為例,介紹“單KEY”類業務,隨著資料量的逐步增大,資料庫效能顯著降低,資料庫水平切分相關的架構實踐: 如何來實施水平切分。 水平切分後常見的問題 。 典型問題的優化思路及實踐。 一、使用者中心 使用者中心是一個非常常見的

GitChat · 架構 | 從訂單中心開始,聊“多KEY”類業務資料庫水平切分架構實踐

前言本篇講義將以“訂單中心”為例,介紹“多key”類業務,隨著資料量的逐步增大,資料庫效能顯著降低,資料庫水平切分相關的架構實踐。一、什麼是“多key”類業務所謂的“多key”,是指一條元資料中,有多個屬性上存在前臺線上查詢需求。訂單中心業務分析訂單中心是一個非常常見的“多k

從訂單中心開始,聊“多KEY”類業務資料庫水平切分架構實踐

有一類“多KEY”特徵的業務,典型代表是“訂單中心”,業務查詢維度會覆蓋order_id/buyer_id/seller_id,這個業務場景,隨著使用者資料量越來越大,資料庫效能顯著降低,如何來對訂單中心業務進行水平切分是本章的重點: “多KEY”類業務的特點與場景。“多

架構路---資料庫水平切分實踐

本人一應屆生,在去實習的地鐵上,看了一篇沈劍老師寫資料庫水平切分架構思路,看完人清氣爽。現在寫一篇部落格記錄下。 引言: 涉及到資料庫水平切分問題,主要有以下兩種問題: 第一:專案開始之前進行資料庫架構設計,考核,規劃以後資料庫量大的情況有很好的擴充套

系統架構解析-讀寫分離,水平切分及快取架構對比

  最近在研究一些系統架構方案,學習到讀寫分離的時候,對於讀寫分離應用場景有了一些自己的理解: 一. 讀寫分離 1. 什麼是資料庫讀寫分離   首先我們看一個讀寫分離架構圖:   讀寫分離就是:一主多從,讀寫分離,主動同步,是一種常見的資料庫架構,一般來說: 主庫:提供

《大型網站技術架構》讀書筆記六:永無止境網站的伸縮性架構

映射 應對 方法 訂閱 知識 位置 n+1 轉換 bsp 此篇已收錄至《大型網站技術架構》讀書筆記系列目錄貼,點擊訪問該目錄可獲取更多內容。 首先,所謂網站的伸縮性,指不需要改變網站的軟硬件設計,僅僅通過改變部署的服務器數量就可以擴大或者縮小網站的服務處理能力。在整個互聯

架構漫談》讀後感 “關於軟件架構師如何工作”

class 關系 好的 質量 結果 主動 沖突 時間 內部   通過社會的架構舉例,從原始自給自足獨立完成衣食住行,到發展中分工合作、相互溝通、將事物完成到一個更好的水平。從而我知道了架構的動力: 必須由人執行的工作 每個人的能力有限 每個人的時間有限 人對

點燃java高級架構師的成長路!

java 分布式 源碼分析 程序員 編程語言 作者:java高級進階鏈接:https://www.nowcoder.com/discuss/72575來源:牛客網 金三銀四跳槽旺季,每個人都想有一份高薪資,環境好,且穩定的工作,現在已經是四月份了,跳槽旺季還剩最後一個月,你們都準備好了麽?

一名工作8年的Java架構師分享經驗如何成為一名架構

Java高級很多工作一定年限的程序員感覺自己到了瓶頸不知道怎麽去突破,其實這個時候就要沖破傳說中的架構師。 架構師是個很神秘人物,那麽架構師的技術一般在什麽程度呢?怎樣才能被稱為架構師? 技術深度 有沒有看過JDK源碼,看過的類實現原理是什麽。 HTTP協議 TCP協議 一致性Hash算法 JVM如何加載字節

大型架構及配置技術Ansible

定義變量 ret replace man ssh端口 語法 字符 ifcfg-eth 運行 大型架構及配置技術之Ansible 一、ansible簡介 1、什麽是ansible ? Ansible是2013年推出的一款IT自動化和DevOps軟件,目前由Redhat已簽署

Android官方架構組件介紹LifeCycle(一)

mave 工程 視圖 平時 清理 star new 內部 serve Android官方架構組件介紹之LifeCycle 下面是官方提供的Android App開發的架構圖: 從上圖可以看到一些關鍵字:ViewModel,LiveData,Room等。其實看了上面視頻的

Android官方架構組件介紹ViewModel(三)

gets use 時間管理 src context per and 發生 方法 ViewModel 像Activity,Fragment這類應用組件都有自己的生命周期並且是被Android的Framework所管理的。Framework可能會根據用戶的一些操作和設備的狀態對

Android官方架構組件介紹應用(四)

怎麽 nbsp 註冊 bool 其他 info get inf prot 講一個項目常見的功能,友盟統計功能 例如一個項目有很多多modlue,每個裏面modlue都有Activity,Activity需要友盟統一,Fragment也需要友盟統計。一般做法就是繼承一個Bas

架構師的必經路 深入淺出JVM虛擬機

kit 對象的引用 編譯 概念 指針 gis constant 深入淺出 條件 運行時數據區域 程序計數器(Programn Counter Register) 程序計數器是一塊較小的內存空間,它可以看做是當前線程所執行的字節碼的行號指示器。 由於 Java 虛擬機的多線程

阿里P7架構師經驗總結——Java架構師必備技能少走彎路系統學習

作為程式猿, 在這樣一個網際網路時代背景下,我們是很幸運的,我們能夠拿著比別的職業更高的工資,坐在高檔寫字樓,在冬暖夏涼辦公環境下,在鍵盤上揮舞著手指就能產出一個個成熟的產品提供給上億(吹牛)的使用者使用,那種成就感和滿足感,是讓我們在朝九晚九的情況下,或者一個個通宵的情況下能夠打雞血似得,只為把改

Java十年敘述一個架構師的職業

前言 文章有點長,請準備好瓜子辣條爆米花礦泉水小板凳慢慢閱讀 職場起步 部門領導看我挺機靈,就讓一專案負責人WW帶我一起封閉去了。專案是Delphi版的系統,WW給我分了一個功能模組,難度中等。說實在的雖在學校寫過東西,與實際工作千差萬別。在封閉開發過程中,繼續當好服務員,

海量 併發 下 的 系統架構 和 資料庫 發展

我們先作一個 設定: 每秒 100 萬 ~ 1000 萬 的 併發量 稱為 “海量” ,  每秒 1000 萬 以上的 併發量 稱為 “天量”  。   我們 再來 看看 2 篇文章 : 《架構設計之路:微信紅包百億級高併發資金交易系統設計架構》   

JAVA架構師的成長

一、基礎篇 JVM Java基礎知識 二、進階篇

JAVA架構師打怪

一Java程式設計入門類 1《Java程式設計思想》 2《Agile Java》中文版 二Java程式設計進階類 1《重構 改善既有程式碼的設計》 2《測試驅動開發 by Example》 三Java架構師之路 1《Expert One-on-One J2EE