本文將介紹如何基於 EAV 模型,來構造一個準自動化的運營系統,服務運營研發部的相關工做。html
運營研發部對接三端(PC、M、APP)後臺工做,勞心勞力。。。git
其實咱們的願景很「簡單」。程序員
漫漫長路。。。github
爲了高可用&擴展性,咱們學習了Drupal的元數據操做、Magento的產品建模、以及各類CMS。數據庫
爲了解決稀疏表,咱們嘗試基於 Column Family(列族)來處理,BigTable、Cassandra、HBase,曾經都是咱們的「座上客」。(事實上,不少團隊已經這樣解決掉了)segmentfault
然而,數據結構
踏破鐵鞋無覓處,得來全不費工夫。架構
一種數據模型悄然而至,實體屬性值模型。dom
來自百度百科:實體屬性值模型(EAV)是一種用數據模型描述實體的屬性(屬性,參數),能夠用來形容他們潛在巨大,但實際上將適用於給定的實體的數量是相對較少。 在數學中,這種模式被稱爲一個稀疏矩陣 。 EAV也被稱爲對象的屬性值的模式,垂直的數據庫模型和開放式架構。工具
這裏不詳細介紹EAV是什麼,由於咱們的設計在EAV之上。(站在巨人的肩膀上)
下面即將進入全文乾貨集中地段。^_^
系統代號:RBZ(肉包子)
系統構成:EAV+DF+AC+PHP+MYSQL
系統模塊:
從技術角度描述RBZ的運轉流程大體以下:
下面逐一講解,他們分別是什麼。:)無比接近乾貨地段了。
基於列模式的表設計。(咱們常規的工做都是行模式)
舉個栗子:A公司售賣鞋子和衣服。(比較極端,勿噴)
行模式(產品表)
|PID | PNAME | 類型 | 尺碼 | 顏色 | | :----:|:----:| --:|-----:|-----:| | 0001 | 鞋子1 | 1 | 42 | 黑色 | | 0002 | 衣服1 | 2 | XL | 藍色 |
列模式(屬性表、實體表)
屬性表(類型、排序、啓用、默認值、可選值、必填...)
| 屬性ID | 屬性名稱 | 屬性字段 | 數據類型 | 屬性分組| | :----:|:----:| --:|-----:| ----:| | 1 | 尺碼 | size | input | 鞋子 | | 2 | 尺碼 | size | input | 衣服 | | 3 | 顏色 | color | input | 鞋子 | | 4 | 顏色 | color | input | 衣服 |
實體表
| ID | 應用ID | 實體ID | 屬性ID | 屬性值 | | :----:|:----:| :--:|:-----:| ----:| | 1 | 1 | 0001 | 1 | 42 | | 2 | 1 | 0001 | 3 | 黑色 | | 3 | 1 | 0002 | 2 | XL | | 4 | 1 | 0002 | 4 | 藍色 |
這番設計,兩個益處。
咱們的常規工做是靜態表單,避免在Code Monkey的路,越走越遠,咱們須要改變。
設計動態表單模型,基本的思路應該是數據和表現顯示的分離。拋開表現層,一個表單包含的若干個字段和填寫的數據。所謂動態,就是這些字段名稱可能改變,數量可能有增減。
配置字段(POI中文名稱)
配置中。。。
見證奇蹟的時刻。(表單自動生成)
這番設計,兩個益處。
經過CMS定義RBZ標籤,結合自定義樣式模版,任意組合吐出數據。
用了一個叫 Mustache 的模版語言。
{{#cmsRbzItems}} 中文名稱 {{attr_cnname}} 英文名稱 {{attr_enname}} 島嶼圖片 {{attr_pic}} 所屬羣礁 {{attr_class}} 酒店品牌 {{attr_hotel}} 費用信息 {{attr_price}} 產品推薦 {{attr_managerrecommend}} 島嶼星級 {{attr_islandstar}} 島嶼排序 {{attr_islandrank}} 上島時間 {{attr_timecost}} {{/cmsRbzItems}}
爲確保RBZ接口的持續交付,咱們選擇用 Postman 來作接口的自動化測試工做。
某一個請求。
每一次發佈。
處子秀:馬爾代夫選島工具
需求:
只需配置,無需研發。
燈燈燈燈。。。
篩選項:
實體:
在這裏,表明官方,誠邀各類應用接入。
淺談RBZ的回報率。
理解EAV模型確實須要時間。它有一個明確的學習曲線,使的初級開發人員在真正理解其概念前,須要爲此付出更多的精力。
應用實體-屬性-值時,應考慮如下條件:
咱們的終極目標是:
人人都是程序員。