2018-11-23 一個公司的圖數據的選型

郭柱明


注意

因爲我之前都要使用博客記錄的習慣 所以下面很多鏈接都鏈接向我自己寫的博客上的 所以導致下面看起來內容不多 其實下面內容還是有的


階段一:圖數據庫考察

圖數據庫的考察是我進入公司開始做的第一部分工作 我們考察圖數據庫的歷程大概是下面這樣的

image_1crgtnkj772g3l31ouj1o8tbchm.png-8.2kB

  1. neo4j是由鴻波進行考差 neo4j是很完善的圖數據庫 但是隻有他的企業版是支持集羣的 但是收費 所以pass 考察的細節都在洪波那裏 那時候我還沒來 所以細節不清楚
  2. dgraph是我考察 細節在如下我的博客記錄 官方文檔也可以學習 推薦教程這個是學習dgraph最好的一個方法了 dgraph也是一個成熟的圖數據庫 有以下特點
    1. 支持resetful api
    2. 使用graphql+-查詢語言進行查詢
    3. 有多種語言的client
    4. 但是不支持自由選擇底層存儲 就是我們公司的高可用mongo集羣的作用發揮不出來
  3. cayley是我們重點考察的圖數據庫 花了很多功夫 這是我對於cayley的基礎知識總結 這是我後來對cayley做的一次技術分享PPT
    • 對於cayley的原理跟設計思想我有去思考的 探索出來的細節未必正確 但是思想我覺得還是可取的
    • 研究了cayley整個項目的構建方法 然後修復了cayley在持久層測試方面上的一個bug 爲cayley貢獻了一點代碼 git commit在這裏 其實這個問題包含的思想很重要的 揚哥因此還送了我一平紅酒 細節請看docker在測試中的應用 後來我也用docker在開發和測試中寫了另外一些demo 用法不一樣基於容器的開發和測試

階段二:開發


cayley時期

我們做了一個demo 就是基於我們的cayley圖數據庫來構建我們的關係圖譜 從而找出用戶中的最近聯繫的人以及可能認識的人 當時因爲在設計理念以及對cayley的使用上 我跟揚哥跟瑩姐之間存在分歧 所以當時每個人都按照自己的想法來寫了一個自己的版本 我的版本如下 graphRelation 裏面還算有不少註釋


hugegraph時期

hugegraph說實話我們沒接觸多長時間 所以在這一階段寫的代碼並不多 有一個需求就是找子圖 代碼在subgraph 裏面我也寫了部分註釋

博客詳情在我的subgraph博客

hugegraph時期我花了很多時間在看gremlin官方文檔上 因爲gremlin語法衆多而且複雜 我並沒有像以前翻譯cayley的查詢語言Gizmo那樣用博客把常用查詢語法記錄下來 所以有點可惜 但是太多了記下來也沒用 可以當官方文檔是字典 使用的時候去查閱 平時只需要記住常用的查詢語法即可


使用docker爲測試提供一次性的數據庫

docker容器目前有三個用處

  • 提供一次性的環境
  • 提供彈性的雲服務
  • 組件微服務架構

我有做基於容器docker的開發和測試上一些簡單的嘗試 詳情請看下面基於容器開發

cayley在它的單元測試跟集成測試部分就是用了docker 但是這裏docker的使用跟上面有所不一樣 上面是所有的部分都包含在容器內部 但是cayley的思路很特別也很有借鑑意義

cayley因爲支持很多種數據庫作爲底層存儲 所以他在每一次的單元測試以及集成測試過程中 都使用docker生成一個數據庫容器 並將程序在運行過程中產生的持久層數據都放進這個數據庫容器中 這樣當測試結束 清除這個容器 保證了測試都進行在一個一次性的環境中 不留下任何測試數據

我爲cayley修好的這個bug就是上面這個問題裏面一個bug 雖然這個bug沒什麼太大意義 但是cayley在這裏的設計思路確實非常值得我們借鑑 藉助docker爲我們的單元測試集成測試提供一次性的數據庫容器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章