国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

元數(shù)據(jù)治理框架Atlas研究——JanusGraph圖數(shù)據(jù)庫(kù)對(duì)象關(guān)系映射

CoffeX / 3843人閱讀

摘要:把元數(shù)據(jù)信息分成和兩類,其中表示對(duì)象自身的屬性如的等,表示對(duì)象和其他元數(shù)據(jù)對(duì)象的關(guān)系如所屬的。這樣設(shè)計(jì)確保在查詢?cè)獢?shù)據(jù)時(shí)選擇是否忽略。具體實(shí)現(xiàn)以函數(shù)為例分析如何根據(jù)唯一屬性查找元數(shù)據(jù)對(duì)象。

概要
Atlas采用了分布式圖數(shù)據(jù)庫(kù)JanusGraph作為數(shù)據(jù)存儲(chǔ),目的在于用有向圖靈活的存儲(chǔ)、查詢數(shù)據(jù)血緣關(guān)系。Atlas定義了一套atlas-graphdb-api,允許采用不同的圖數(shù)據(jù)庫(kù)引擎來(lái)實(shí)現(xiàn)api,便于切換底層存儲(chǔ)。所以Atlas讀寫數(shù)據(jù)的過(guò)程可以看作就是將圖數(shù)據(jù)庫(kù)對(duì)象映射成Java類的過(guò)程,基本流程如下:

元數(shù)據(jù)對(duì)象——AtlasEntity
在Atlas中所有的元數(shù)據(jù)對(duì)象都被表示為一個(gè)entity,對(duì)應(yīng)源碼中的AtlasEntity類。所有與外部的數(shù)據(jù)交互都要通過(guò)AtlasEntity來(lái)進(jìn)行,主要成員變量為:

    public class AtlasEntity {
        private String typeName;
        private String  guid;
        private Map attributes;
        private Map relationshipAttributes;
    }

attribute和relationshipAttribute的類型是寬松的,可以是String、Int、Array等基本數(shù)據(jù)類型,也可以是另外一個(gè)entity。

Atlas把元數(shù)據(jù)信息分成attributes和relationshipAttributes兩類,其中attriubtes表示對(duì)象自身的屬性如table的owner、createTime等,relationshipAttributes表示對(duì)象和其他元數(shù)據(jù)對(duì)象的關(guān)系如table所屬的db。這樣設(shè)計(jì)確保在查詢?cè)獢?shù)據(jù)時(shí)選擇是否忽略relationshipAttributes。

具體實(shí)現(xiàn)
以AtlasEntityStoreV2.getByUniqueAttributes()函數(shù)為例分析Atlas如何根據(jù)唯一屬性查找元數(shù)據(jù)對(duì)象。
step1:根據(jù)屬性查詢圖中對(duì)應(yīng)的頂點(diǎn)
調(diào)用AtlasGraphUtilsV2.getVertexByUniqueAttributes()函數(shù),根據(jù)uniqueAttributes查詢AtlasVertex。判斷uniqueAttribute是否建立了索引:存在索引時(shí),底層調(diào)用JanusGraphIndexQuery進(jìn)行查詢;沒有索引時(shí),底層調(diào)用JanusGraphQuery進(jìn)行查詢。
step2:將圖頂點(diǎn)轉(zhuǎn)換為元數(shù)據(jù)對(duì)象的屬性
Atlas對(duì)不同的屬性類型設(shè)置了不同的轉(zhuǎn)換方式,核心函數(shù)EntityGraphRetriever.mapVertexToAttribute()主要代碼如下:

        switch (attrType.getTypeCategory()) {
            case PRIMITIVE:
                ret = mapVertexToPrimitive(entityVertex, attribute.getVertexPropertyName(), attribute.getAttributeDef());
                break;
            case ENUM:
                ret = AtlasGraphUtilsV2.getEncodedProperty(entityVertex, attribute.getVertexPropertyName(), Object.class);
                break;
            case STRUCT:
                ret = mapVertexToStruct(entityVertex, edgeLabel, null, entityExtInfo, isMinExtInfo);
                break;
            case OBJECT_ID_TYPE:
                ret = mapVertexToObjectId(entityVertex, edgeLabel, null, entityExtInfo, isOwnedAttribute, edgeDirection, isMinExtInfo);
                break;
            case ARRAY:
                ret = mapVertexToArray(entityVertex, entityExtInfo, isOwnedAttribute, attribute, isMinExtInfo);
                break;
            case MAP:
                ret = mapVertexToMap(entityVertex, entityExtInfo, isOwnedAttribute, attribute, isMinExtInfo);
                break;
            case CLASSIFICATION:
                // do nothing
                break;
        }

總結(jié)attribute和vertex轉(zhuǎn)換規(guī)則
1)attribute類型為PRIMITIVE(基本數(shù)據(jù)類型):attribute對(duì)應(yīng)vertex的property
2)attribute類型為STRUCT(結(jié)構(gòu)體):根據(jù)帶有特定label的edge找到連接的_vertex,再調(diào)用mapAttributes(AtlasVertex vertex)函數(shù)轉(zhuǎn)換vertex為entity,作為當(dāng)前查詢?cè)獢?shù)據(jù)對(duì)象的屬性
3)attribute類型為ObjectId,根據(jù)帶有特定label的edge找到連接的_vertex,將_vertex的id屬性封裝成AtlasObjectId作為當(dāng)前查詢?cè)獢?shù)據(jù)對(duì)象的屬性。
4)attribute類型為ARRAY時(shí):數(shù)組元素類型為PRIMITIVE時(shí)調(diào)用AtlasElement.getListProperty()獲取屬性內(nèi)容;數(shù)組元素類型為STRUCT、ObjectId根據(jù)label獲取List,然后按照2、3情況依次獲取屬性放入數(shù)組之中
5)attribute類型為MAP時(shí):轉(zhuǎn)換規(guī)則與ARRAY相似

總結(jié)
在Atlas中查詢某一個(gè)元數(shù)據(jù)對(duì)象時(shí)往往需要遍歷圖數(shù)據(jù)庫(kù)中的多個(gè)頂點(diǎn)與邊,相比關(guān)系型數(shù)據(jù)庫(kù)直接查詢一行數(shù)據(jù)要復(fù)雜的多。尤其是當(dāng)查詢一個(gè)Array類型的屬性時(shí)需要向底層數(shù)據(jù)庫(kù)獲取多個(gè)相關(guān)聯(lián)的vertex和eage,這種情況下讀寫性能較差。當(dāng)然使用圖數(shù)據(jù)庫(kù)作為底層存儲(chǔ)也存在它的優(yōu)勢(shì),比如可以支持復(fù)雜的數(shù)據(jù)類型和更好的支持血緣數(shù)據(jù)的讀寫。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/77437.html

相關(guān)文章

  • 數(shù)據(jù)治理框架Atlas研究——數(shù)據(jù)寫入過(guò)程源碼分析

    摘要:概要通過(guò)函數(shù)進(jìn)行數(shù)據(jù)寫入,了解這個(gè)重要函數(shù)有助于理解工作流程優(yōu)化寫入性能。舉個(gè)例子,的屬性為的客戶端向重復(fù)創(chuàng)建,屬性的值為,每次值為當(dāng)前時(shí)間戳而不同,造成元數(shù)據(jù)重復(fù)更新。 概要Atlas通過(guò)AtlasEntityStoreV2.createOrUpdate函數(shù)進(jìn)行數(shù)據(jù)寫入,了解AtlasEntityStoreV2.createOrUpdate這個(gè)重要函數(shù)有助于理解Atlas工作流程、優(yōu)...

    wanglu1209 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<