最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

數(shù)據(jù)層簡(jiǎn)單設(shè)計(jì)

2023-02-27 13:53 作者:pathologyenigma  | 我要投稿

之前在為irmin實(shí)現(xiàn)odm的時(shí)候碰到了問(wèn)題(該問(wèn)題也許在熟悉該數(shù)據(jù)庫(kù)以后可以解決,但眼下如果等待在下學(xué)習(xí)該數(shù)據(jù)庫(kù)會(huì)打亂本系列的進(jìn)程),是時(shí)候來(lái)追尋一種新的解決方案了,由于我們需要的是一個(gè)分布式的數(shù)據(jù)層解決方案,所以根據(jù)我們的目的是橫向擴(kuò)展還是縱向擴(kuò)展,可能會(huì)有所不同

由于技術(shù)能力有限,這里在下選擇的是擴(kuò)容的方式,即當(dāng)數(shù)據(jù)量上升時(shí)添加新的數(shù)據(jù)庫(kù)實(shí)例進(jìn)入cluster的方式,那么至少需要使用的數(shù)據(jù)庫(kù)支持此類(lèi)擴(kuò)展,當(dāng)然,任何分布式數(shù)據(jù)庫(kù)都是支持這種擴(kuò)展方式的,但本地化策略和云服務(wù)策略的方便程度差距甚大,故而推薦各位有經(jīng)濟(jì)能力的還是盡量使用云方案,有技術(shù)水平的可以省下一些錢(qián),但代碼是發(fā)際線的不可逆的上升

首先,我們的項(xiàng)目是一個(gè)微服務(wù)項(xiàng)目,數(shù)據(jù)可能會(huì)拆分的比較細(xì),這給了我們對(duì)于不同的數(shù)據(jù)給予不同的存儲(chǔ)方案的可能性,例如,常規(guī)的用戶個(gè)人信息和用戶安全信息可以使用傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù),核心邏輯如果關(guān)系錯(cuò)綜復(fù)雜則可以使用圖數(shù)據(jù)庫(kù),類(lèi)似發(fā)帖子之類(lèi)的大量文本且需要支持站內(nèi)文本搜索的功能則可以考慮文本型數(shù)據(jù)庫(kù)

那么,本系列編寫(xiě)的項(xiàng)目是一個(gè)類(lèi)似于卡牌社區(qū)的東西,包含卡牌發(fā)布,卡牌收藏,卡池模擬和一個(gè)社區(qū)分享功能,基于以上功能我們不難得出核心功能涉及的數(shù)據(jù)支持存在復(fù)雜的關(guān)系

例如,一個(gè)用戶可以創(chuàng)建卡牌和卡牌收藏,同時(shí)卡牌收藏可以收藏卡牌,此時(shí)用戶和卡牌,卡牌收藏直接兩兩均具有關(guān)系,卡池模擬需要從卡牌收藏中選取卡牌,設(shè)置卡池相關(guān)數(shù)據(jù),此時(shí)卡池與用戶和卡牌以及卡牌收藏均存在關(guān)系(當(dāng)然這里可能會(huì)使用一些緩存以便在云端模擬抽卡,而非在客戶端進(jìn)行),甚至在社區(qū)分享時(shí)也可以引用卡牌或者收藏,甚至是卡池配置之類(lèi)的,如果使用傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù),各種外鍵和索引亂飛屬實(shí)是會(huì)很頭疼,而且還需要大量的鉤子來(lái)監(jiān)聽(tīng)相關(guān)數(shù)據(jù)變化以期可以同步變化之類(lèi)的,此時(shí)使用圖數(shù)據(jù)庫(kù)將會(huì)更方便,這里的用戶數(shù)據(jù)將會(huì)來(lái)自外部的關(guān)系型數(shù)據(jù)庫(kù)故而在此處只需要使用與該功能相關(guān)的用戶id即可

簡(jiǎn)單的說(shuō)明了以后,想必應(yīng)該怎么設(shè)計(jì)數(shù)據(jù)層的結(jié)構(gòu)各位已經(jīng)心里有數(shù)了,但這里還是簡(jiǎn)單的說(shuō)一下吧

對(duì)于傳統(tǒng)數(shù)據(jù)庫(kù)部分,我使用一個(gè)分布式解決方案——cockroach,這是一個(gè)在postgresql的基礎(chǔ)上打造的分布式解決方案,免費(fèi)情況下有5G的空間可以用,對(duì)于我們只存用戶基本數(shù)據(jù)而言已然足夠,就算不夠也可以簡(jiǎn)單的進(jìn)行擴(kuò)展

對(duì)于圖數(shù)據(jù)庫(kù),這里我們使用任一支持cluster的或者其他擴(kuò)展方式的圖數(shù)據(jù)庫(kù)均可,為了方便我們直接使用neo4j的云服務(wù),畢竟neo4j我最熟悉,也用的比較多,在下最近收到過(guò)一個(gè)offer,關(guān)于neo4j和nodejs的,對(duì)方需要專(zhuān)門(mén)圖數(shù)據(jù)庫(kù)相關(guān)的高級(jí)工程師,工作就是構(gòu)建數(shù)據(jù)解決方案,透露對(duì)方的項(xiàng)目不太好,由于對(duì)方需要領(lǐng)英相關(guān)的東西和遠(yuǎn)程辦公等東西,在下并未回復(fù),但因?yàn)镚itHub項(xiàng)目收到類(lèi)似offer的郵件也有那么幾次,這里只是想表達(dá)neo4j我熟,沒(méi)別的意思

對(duì)于文本型數(shù)據(jù)庫(kù),選擇其實(shí)很多,如果選擇mongo的話,可以僅通過(guò)免費(fèi)版自己搭建cluster來(lái)實(shí)現(xiàn)擴(kuò)展,也可以購(gòu)買(mǎi)云服務(wù)(mongo的免費(fèi)套餐比較小,作為文本數(shù)據(jù)庫(kù)數(shù)據(jù)的量不大的時(shí)候也可能因?yàn)椴糠謹(jǐn)?shù)據(jù)的文本量大而快速達(dá)到瓶頸),也可以使用一些自帶文本搜索的方案,例如elasticsearch,這里我們會(huì)使用一個(gè)由rust編寫(xiě)的解決方案(之后會(huì)專(zhuān)門(mén)由一篇專(zhuān)欄來(lái)介紹)

那么我們的數(shù)據(jù)層可以單獨(dú)編寫(xiě)為一個(gè)服務(wù),該服務(wù)運(yùn)行在多個(gè)數(shù)據(jù)庫(kù)服務(wù)之上,為其他服務(wù)提供數(shù)據(jù)訪問(wèn)能力,對(duì)于下層的數(shù)據(jù)庫(kù),傳統(tǒng)數(shù)據(jù)庫(kù)部分可以直接使用任一你喜歡的rust編寫(xiě)的orm,這里我選擇曾經(jīng)邀請(qǐng)我展示項(xiàng)目的sea-orm,圖數(shù)據(jù)庫(kù)部分,由于圖數(shù)據(jù)庫(kù)和graphql比較契合,所以很多圖數(shù)據(jù)多多少少都有g(shù)raphql api(neo4j的是官方維護(hù)的,arangodb在插件列表可以看到,但不清楚是否為官方的,其他的圖數(shù)據(jù)庫(kù)用的比較少就不亂說(shuō)了),這里就使用neo4j的graphql ogm編寫(xiě)一個(gè)nodejs項(xiàng)目,然后將這個(gè)js項(xiàng)目部署為rpc項(xiàng)目,供上層的數(shù)據(jù)服務(wù)調(diào)用(當(dāng)然直接將graphql ogm的接口公開(kāi)給rust也行,但由于部分參數(shù)的結(jié)構(gòu)過(guò)于復(fù)雜,會(huì)導(dǎo)致graphql client生成出來(lái)的參數(shù)類(lèi)型過(guò)于龐大,需要寫(xiě)太多None(),部分并非graphql內(nèi)置的類(lèi)型還需要提供在rust中的實(shí)現(xiàn),具體有多痛苦看我為啥棄用了https://github.com/pathologyenigma/Card-Server-ArangoDB-based-/tree/master(deprecated) 這個(gè)項(xiàng)目就知道了),最后直接在該服務(wù)的gateway api中對(duì)文本數(shù)據(jù)庫(kù)做簡(jiǎn)單的封裝即可(文本型數(shù)據(jù)庫(kù)真的沒(méi)有特別設(shè)計(jì)復(fù)雜數(shù)據(jù)結(jié)構(gòu)的必要,別人本來(lái)也不是干這個(gè)的)


數(shù)據(jù)層簡(jiǎn)單設(shè)計(jì)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
探索| 缙云县| 新野县| 德令哈市| 鹤壁市| 盐津县| 宜兰县| 汶上县| 达孜县| 印江| 柯坪县| 天气| 崇文区| 沁源县| 金乡县| 清丰县| 高州市| 富源县| 杂多县| 高碑店市| 井陉县| 丹东市| 赤峰市| 景谷| 扶风县| 永川市| 湟中县| 施秉县| 府谷县| 望谟县| 陆川县| 泰宁县| 永清县| 轮台县| 惠东县| 胶南市| 平陆县| 祁连县| 宜宾县| 江阴市| 昆明市|