《NOSQL數(shù)據(jù)庫技術(shù)》課件第3章-Neo4j圖數(shù)據(jù)庫_第1頁
《NOSQL數(shù)據(jù)庫技術(shù)》課件第3章-Neo4j圖數(shù)據(jù)庫_第2頁
《NOSQL數(shù)據(jù)庫技術(shù)》課件第3章-Neo4j圖數(shù)據(jù)庫_第3頁
《NOSQL數(shù)據(jù)庫技術(shù)》課件第3章-Neo4j圖數(shù)據(jù)庫_第4頁
《NOSQL數(shù)據(jù)庫技術(shù)》課件第3章-Neo4j圖數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

目錄Neo4jDB基礎(chǔ)1Neo4j數(shù)據(jù)操作基礎(chǔ)2Neo4j集群技術(shù)3Neo4j管理與監(jiān)控4小結(jié)513.1Neo4jDB基礎(chǔ)2Neo4j圖數(shù)據(jù)庫采用Java語言開發(fā)。Neo4j圖數(shù)據(jù)庫是以原生圖結(jié)構(gòu)形式來存儲數(shù)據(jù)的,數(shù)據(jù)模型對于實體及其間的復(fù)雜關(guān)聯(lián)關(guān)系具有天生的適配性官網(wǎng):/誰在用?https:///customers/3.1Neo4jDB基礎(chǔ)Neo4j特點優(yōu)越的性能:高效的讀寫能力;設(shè)計的靈活性:無固定模式,自然擴(kuò)展;迭代的敏捷性:適應(yīng)迭代的敏捷開發(fā)方法;安全可靠:支持事務(wù)管理,提供實時在線備份、日志恢復(fù)功能;簡單易用:支持多種程序設(shè)計語言開發(fā),特別是SpringdataNeo4j開發(fā)包;支持RESTAPI;提供類SQL的圖數(shù)據(jù)查詢語言:Neo4jCQL;支持批量導(dǎo)入、導(dǎo)出圖數(shù)據(jù);提供一個用于執(zhí)行CQL命令的WebUI:通過瀏覽器即可操作Neo4j圖數(shù)據(jù);3.1Neo4jDB基礎(chǔ)Neo4j特點(續(xù))支持索引機(jī)制及UNIQUE約束;采用原生圖數(shù)據(jù)存儲模式與圖計算引擎;提供豐富的圖數(shù)據(jù)處理與分析算法庫(APOC);提供豐富的API,支持Java、Python、Scala等編程語言;集群架構(gòu)易于橫向擴(kuò)展;最新4.0版本在橫向擴(kuò)展方面、安全控制粒度方面、支持Web應(yīng)用響應(yīng)式開發(fā)框架技術(shù)等方面都有很大提升;豐富的學(xué)習(xí)資源:/graphgists/;大企業(yè)實踐應(yīng)用的考驗:擁有廣大實力派用戶群體,驗證了其穩(wěn)定性、健壯性;3.1Neo4jDB基礎(chǔ)Neo4j特點(續(xù)):采用屬性圖模型描述業(yè)務(wù)關(guān)鍵圖數(shù)據(jù)圖數(shù)據(jù)模型關(guān)鍵要素

節(jié)點、關(guān)系、節(jié)點屬性、關(guān)系屬性等還有?Neo4j數(shù)據(jù)模型基本要素節(jié)點存儲(nodestore)關(guān)系存儲(relationshipstore)屬性存儲(propertystore)標(biāo)簽(Label):表示類別的含義3.1Neo4jDB基礎(chǔ)官網(wǎng)下載:https:///社區(qū)版:單機(jī)、免費(fèi)。課堂演示采用該版本企業(yè)版示例采用2019年發(fā)布的3.5版本;2020年1月15日發(fā)布最新版本4.0,讀者可自行對比練習(xí);4..0版本主要在多數(shù)據(jù)庫訪問支持、響應(yīng)式開發(fā)等方面進(jìn)行提升3.1.1下載與安裝Windows版本安裝,linux平臺安裝步驟類似下載neo4j-community-3.5.x-windows.zip需要OpenJDK8或者

OracleJava8環(huán)境創(chuàng)建目錄:如D:\neo4j\解壓,主要文件夾作用如下:bin目錄:用于存儲Neo4j的可執(zhí)行程序;conf目錄:用于控制Neo4j啟動的配置文件,neo4j.conf

;data目錄:用于存儲核心數(shù)據(jù)庫文件;plugins目錄:用于存儲Neo4j的插件;logs目錄:用于存儲日志文件;lib目錄:用于存儲依賴的jar包文件;3.1.1下載與安裝配置環(huán)境變量設(shè)置環(huán)境變量:NEO4J_HOME為安裝路徑修改環(huán)境變量:PATH,加上Neo4j的bin目錄3.1.1下載與安裝啟動服務(wù):管理員身份方法1:控制臺啟動:neo4j.batconsole問題:需要始終開啟窗口,否則服務(wù)無法訪問方法2:安裝服務(wù),在系統(tǒng)服務(wù)管理中啟停服務(wù)neo4jinstall-service方法3:neo4jstart命令啟動服務(wù)

neo4jstop命令停止服務(wù)3.1.1下載與安裝啟動服務(wù)驗證服務(wù)啟動成功使用瀏覽器打開:http://localhost:74743.1.1下載與安裝登錄數(shù)據(jù)庫服務(wù)默認(rèn)登錄賬號:neo4j密碼:neo4j首次登錄需要修改密碼:如改為yuan3.1.1下載與安裝左邊收藏中有電影庫示例及其它功能菜單3.1.1下載與安裝在Web控制臺可以執(zhí)行以下命令查看有關(guān)CQL的詳細(xì)在線語法幫助。$:helpcypherNeo4j除了提供Web控制臺方式操作數(shù)據(jù)庫外,也提供了Cypher-shell的命令行方式操作數(shù)據(jù)庫。命令行交互環(huán)境下可輸入:help查看cypher命令提示信息輸入:quit則退出交互環(huán)境cypher命令執(zhí)行時需要以冒號開頭3.1.1下載與安裝Neo4j除了CQL默認(rèn)提供的函數(shù)和存儲過程外,還提供了功能強(qiáng)大的擴(kuò)展APOC庫。可以調(diào)用庫函數(shù)進(jìn)行更復(fù)雜的圖數(shù)據(jù)處理與分析如圖數(shù)據(jù)集成處理、社團(tuán)檢測、節(jié)點重要性計算、PageRank等算法,及靈活的格式轉(zhuǎn)換等數(shù)據(jù)處理函數(shù)。需要額外安裝對應(yīng)程序包,如apoc--all.jars實踐環(huán)節(jié)再詳細(xì)介紹,右邊命令可確認(rèn)是否安裝成功以下為格式轉(zhuǎn)換命令示例3.1.1下載與安裝在Neo4j數(shù)據(jù)庫中,節(jié)點、邊的屬性是一系列的Key、Value值對,Key取值要求為字符串類型,表示屬性的名稱,屬性Value的類型如表所示,可以是9種基本類型之一,也可以是由基本類型組成的數(shù)組類型。序號CQL數(shù)據(jù)類型含義1boolean布爾:true,false2byte8位整數(shù)3short16位整數(shù)4int32位整數(shù)5long64位整數(shù)6float32位浮點7double64位浮點8char16位Unicode字符9string字符串,Unicode字符序列3.1.2數(shù)據(jù)類型復(fù)雜類型支持映射(Map):KV形式列表(List)類型:類似數(shù)組的形式存儲多個值的序列可以通過位置引用某個元素值,位置索引從0開始,位置為負(fù)時表示從尾部開始時間、日期類型:不直接支持通過函數(shù)調(diào)用實現(xiàn),如下date函數(shù)調(diào)用示例3.1.2數(shù)據(jù)類型時間、日期類型:不直接支持(續(xù))timestamp()函數(shù)可以用來獲取當(dāng)前的時間timestamp()函數(shù)內(nèi)部是使用System.currentTimeMillis()返回當(dāng)前毫秒級時間戳值的??梢允褂肁POC庫函數(shù)apoc.date.format來完成格式轉(zhuǎn)換操作,如按”yyyy-MM-ddHH:mm:ss”格式顯示3.1.2數(shù)據(jù)類型目錄Neo4jDB基礎(chǔ)1Neo4j數(shù)據(jù)操作基礎(chǔ)2Neo4j集群技術(shù)3Neo4j管理與監(jiān)控4小結(jié)5193.2Neo4j數(shù)據(jù)操作基礎(chǔ)20Neo4j每次啟動讀取配置文件中默認(rèn)鏈接的數(shù)據(jù)庫如初始默認(rèn)配置數(shù)據(jù)庫名稱為:graph.db對應(yīng)配置文件neo4j.conf中對應(yīng)的數(shù)據(jù)庫配置項:dbms.active_database=graph.db數(shù)據(jù)庫文件位于安裝路徑下的\data\databases\graph.db文件夾下后續(xù)實踐課學(xué)習(xí)如何新建其他數(shù)據(jù)庫節(jié)點及其屬性、標(biāo)簽的CRUD創(chuàng)建沒有屬性的節(jié)點創(chuàng)建包含屬性的節(jié)點創(chuàng)建有一個標(biāo)簽的節(jié)點創(chuàng)建有多個標(biāo)簽的節(jié)點節(jié)點查詢、修改、刪除操作3.2.1節(jié)點操作1、創(chuàng)建沒有屬性的節(jié)點CREATE(<node-v-name>:<label-name>)例:create(emp:Employee)create(dept:Dept)注:如果執(zhí)行兩次上面標(biāo)紅色的語句會報錯嗎?<node-name>要創(chuàng)建的節(jié)點名稱。<label-name>節(jié)點標(biāo)簽名稱3.2.1節(jié)點操作說明:v表示variable,變量2、創(chuàng)建有屬性的節(jié)點CREATE(<node-v-name>:<label-name>

{

<Property1-name>:<Property1-Value>

<Propertyn-name>:<Propertyn-Value>

})示例:CREATE(dept:Dept{deptno:10,dname:"Accounting",location:"Hyderabad"})3.2.1節(jié)點操作3.創(chuàng)建標(biāo)簽:節(jié)點單一標(biāo)簽CREATE(<node-v-name>:<label-name>)示例:CREATE(google1:GooglePlusProfile)4.同時創(chuàng)建節(jié)點的多個標(biāo)簽CREATE(<node-v-name>:<label-name1>:<label-name2>:<label-namen>)示例:CREATE(m:Movie:Cinema:Film:Picture)3.2.1節(jié)點操作節(jié)點查找

MATCH

(emp:Employee)

WHERE

='Abc'OR='Xyz'

RETURNemp查詢所有節(jié)點,結(jié)果顯示如圖

MATCH(n)RETURNn;3.2.1節(jié)點操作更改節(jié)點屬性語法:SET<property-name-list>示例:1)批量修改MATCH(emp:Employee)setemp.sal=3456returnemp2)

加WHERE過濾條件,修改滿足條件節(jié)點的屬性MATCH(emp:Employee)WHEREemp.id=121setemp.sal=5678returnemp3)加屬性匹配過濾條件,修改匹配節(jié)點的屬性MATCH(emp{id:121})setemp.sal=9000returnemp3.2.1節(jié)點操作刪除節(jié)點示例語法:DELETE<node-name-list>示例:match(e:Employee)DELETEe注意:當(dāng)節(jié)點含關(guān)系時,無法執(zhí)行刪除。可以限定要刪除節(jié)點滿足的屬性取值及其它需要滿足的條件3.2.1節(jié)點操作刪除節(jié)點屬性,關(guān)系屬性刪除語法類似語法:REMOVE<property-name-list>示例:1)創(chuàng)建CREATE(book:Book{id:122,title:"Neo4jTutorial",pages:340,price:250})3.2.1節(jié)點操作刪除節(jié)點屬性,關(guān)系屬性刪除語法類似(續(xù))示例:2)查詢:match(n:Book)returnnlimit253)刪除節(jié)點屬性MATCH(book{id:122})removebook.pricereturnbook3.2.1節(jié)點操作刪除節(jié)點標(biāo)簽,關(guān)系標(biāo)簽刪除語法類似語法:REMOVE<label-name-list>示例:MATCH(m:Movie)removem:PictureREMOVE與DELETE比較DELETE刪除節(jié)點、關(guān)系;REMOVE刪除屬性、標(biāo)簽;二者都不能獨(dú)立使用;二者需要和MATCH配合使用;3.2.1節(jié)點操作使用循環(huán)批量創(chuàng)建節(jié)點示例:with["a","b","c"]ascollforeach

(valueincoll|create(:person{name:value}))3.2.1節(jié)點操作1、創(chuàng)建無屬性的關(guān)系CREATE

(<node1-v-name>:<node1-label-name>{…})-[<relationship-v-name>:<relationship-label-name>]->

(<node2-v-name>:<node2-label-name>{…})RETURN<relationship-v-name>示例:create(p1:Person)-[like:LIKES]->(p2:Person)3.2.2關(guān)系操作return非必需,也可返回其它表達(dá)式結(jié)果2、創(chuàng)建有屬性的關(guān)系CREATE(<node1-v-name>:<node1-label-name>{<define-properties-list>})-[<relationship-v-name>:<relationship-label-name>{<define-properties-list>}]->(<node2-v-name>:<node2-label-name>{<define-properties-list>})RETURN<relationship-v-name>示例:CREATE(TheMatrix:Movie{title:'TheMatrix',released:1999,tagline:'WelcometotheRealWorld'})CREATE(Keanu:Person{name:'KeanuReeves',born:1964})CREATE(Keanu)-[:ACTED_IN{roles:['Neo']}]->(TheMatrix);3.2.2關(guān)系操作return非必需,也可返回其它表達(dá)式結(jié)果3、匹配已有節(jié)點,創(chuàng)建關(guān)系MATCH(<node1-v-name>:<node1-label-name>{…}),(<node2-v-name>:<node2-label-name>{…})CREATE

(<node1-v-name>)-[<relationship-v-name>:<relationship-label-name>{<define-properties-list>}]->(<node2-v-name>)RETURN<relationship-v-name>示例:CREATE(e:Customer{custID:100});CREATE(cc:CreditCard{cardID:300360});MATCH(e:Customer{custID:100}),(cc:CreditCard{cardID:300360})CREATE(e)-[r:DO_SHOPPING_WITH]->(cc);3.2.2關(guān)系操作刪除關(guān)系示例,通常語法:DELETE<relationship-v-name>注:需配合匹配子句指定要刪除關(guān)系需滿足的條件示例:1)查詢MATCH(cc:CreditCard)-[r]-(e:Customer)RETURNcc,e,r3.2.2關(guān)系操作刪除關(guān)系示例,通常2)刪除節(jié)點及關(guān)系match(cc:CreditCard)-[r]-(e:Customer)whereid(r)=273deleter3)查詢MATCH(cc:CreditCard)-[r]-(e:Customer)RETURNcc,e,r4)以下語句會產(chǎn)生什么效果呢?match(cc:CreditCard)-[r]-(e:Customer)delete

r3.2.2關(guān)系操作排序子句語法:ORDERBY<property-name-list>[DESC]示例:create(emp:Employee{id:121,name:"qiqi",sal:35600,deptno:11})create(emp:Employee{id:123,name:"maqi",sal:5600,deptno:131})create(emp:Employee{id:125,name:"wufang",sal:8600,deptno:123})MATCH(emp:Employee)returnemp.id,,emp.sal,emp.deptno3.2.3排序與聚合操作排序子句示例:MATCH(emp:Employee)returnemp.id,,emp.sal,emp.deptnoORDERBYDESCMATCH(emp:Employee)returnemp.id,,emp.sal,emp.deptnoORDERBYemp.sal3.2.3排序與聚合操作使用WITH,連接子句MATCH(a:Person)-[:ACTED_IN]->(b:Movie)WITHa,count(b)ASk

WHEREk>0RETURNa,kORDERBYkDESC3.2.3排序與聚合操作如經(jīng)典的最短路徑查詢MATCH(bacon:Person{name:"KevinBacon"})-[*1..4]-(hollywood)RETURNDISTINCThollywood3.2.4路徑操作CQL索引Neo4jCQL支持節(jié)點或關(guān)系屬性上的索引,以進(jìn)一步提高應(yīng)用程序的性能??蔀榫哂邢嗤瑯?biāo)簽的節(jié)點屬性、關(guān)系屬性創(chuàng)建索引。可以在MATCH或WHERE或IN運(yùn)算符上使用這些索引來改進(jìn)CQLCommand的執(zhí)行性能。Neo4J索引操作CreateIndex

創(chuàng)建索引CREATEINDEXON:<label_name>(<property_name>)DropIndex

刪除索引DROPINDEXON:<label_name>(<property_name>)3.2.5索引操作CQLUNIQUE約束Neo4j數(shù)據(jù)庫支持對節(jié)點或關(guān)系的屬性設(shè)定UNIQUE約束創(chuàng)建唯一約束語法CREATECONSTRAINTON(<label_name>)ASSERT<property_name>ISUNIQUE刪除UNIQUE約束語法DROPCONSTRAINTON(<label_name>)ASSERT<property_name>ISUNIQUE3.2.6約束操作調(diào)用存儲過程CALLdb.labels()CALLcedures():返回可用的存儲過程列表及說明3.2.7存儲過程調(diào)用目錄Neo4jDB基礎(chǔ)1Neo4j數(shù)據(jù)操作基礎(chǔ)2Neo4j集群技術(shù)3Neo4j管理與監(jiān)控4小結(jié)5443.3Neo4j集群技術(shù)45集群技術(shù)是低成本提供高性能存儲與訪問圖數(shù)據(jù)的關(guān)鍵技術(shù)Neo4j圖數(shù)據(jù)庫主要有兩種集群方式因果集群(CausalClustering)在3.1企業(yè)版中增加采用先進(jìn)的集群架構(gòu)和安全架構(gòu)滿足企業(yè)更大規(guī)模生產(chǎn)與安全性、可用性需求配置文件集群類別dbms.mode的值:CORE或者READ_REPLICA高可用性集群(HighAvailability,HA)最先在1.2版本上提供配置文件集群類別dbms.mode的值:HA3.3.1因果集群46因果集群按節(jié)點在集群中的操作任務(wù)分工,主要分為兩類(1)核心服務(wù)器(CoreServer):處理讀寫的操作,大多數(shù)的核心服務(wù)器主要處理寫操作。(2)讀復(fù)制服務(wù)器(ReadReplicas):集群中可以包含一個或多個只負(fù)責(zé)分擔(dān)讀數(shù)據(jù)任務(wù)的服務(wù)器,數(shù)據(jù)從核心服務(wù)器異步更新,保持一致。安全性:當(dāng)大多數(shù)核心服務(wù)器正常運(yùn)行時,該平臺將保持可用。擴(kuò)展性:讀復(fù)制服務(wù)器提供了可大規(guī)模橫向擴(kuò)展的平臺,可以高效地分擔(dān)圖數(shù)據(jù)查詢類負(fù)載。因果一致性:保證客戶端應(yīng)用程序至少能夠讀取自己的寫入。3.3.1因果集群47為了保障一定數(shù)量核心服務(wù)器的容錯能力,一般通過公式M=2F+1來計算集群中核心服務(wù)器的數(shù)量規(guī)模F為容錯服務(wù)器數(shù)量M為核心服務(wù)器總數(shù)量如果可容忍1臺故障服務(wù)器,則需要配置3臺服務(wù)器。架構(gòu)中核心服務(wù)器基于Raft協(xié)議維護(hù)和管理,并內(nèi)置了由Neo4jBolt驅(qū)動處理的負(fù)載均衡機(jī)制3.3.2高可用性集群Neo4j高可用性(HA)集群采用主從式架構(gòu),可以1主多從。主服務(wù)器完成寫入之后,同步數(shù)據(jù)到從服務(wù)器,主服務(wù)器既可以寫也能讀。與其他主從復(fù)制相比,Neo4j從節(jié)點(slave)可以處理寫入,不需要都從主節(jié)點直接寫入。但為保持?jǐn)?shù)據(jù)一致性,從節(jié)點將寫請求發(fā)給主節(jié)點同步處理寫入。然而更新操作最終從主節(jié)點傳播到從節(jié)點(slave),所以一個從節(jié)點的寫入在其他所有從節(jié)點上不是立即可見的。目錄Neo4jDB基礎(chǔ)1Neo4j數(shù)據(jù)操作基礎(chǔ)2Neo4j集群技術(shù)3Neo4j管理與監(jiān)控4小結(jié)5493.4Neo4j管理與監(jiān)控50Neo4j圖數(shù)據(jù)庫提供了方便、易用的管理與監(jiān)控功能批量圖數(shù)據(jù)導(dǎo)入圖數(shù)據(jù)庫備份、恢復(fù)事務(wù)管理監(jiān)控與日志……3.4.1圖數(shù)據(jù)導(dǎo)入51圖數(shù)據(jù)庫在初始建立或者數(shù)據(jù)庫遷移時,往往需要將大量歷史數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫。為了提高工作效率,Neo4j為用戶提供了方便的批量數(shù)據(jù)導(dǎo)入操作。Neo4j導(dǎo)入方法主要有兩種LOAD命令導(dǎo)入CSV格式數(shù)據(jù)$LOADCSVWITHHEADERSFROM"/northwind/products.csv"ASrowneo4j-import工具也可以借助第三方ETL工具軟件完成數(shù)據(jù)導(dǎo)入、導(dǎo)出處理任務(wù)。數(shù)據(jù)導(dǎo)入、導(dǎo)出方法將在實踐課具體介紹。3.4.2圖數(shù)據(jù)備份與恢復(fù)52Neo4j數(shù)據(jù)庫中數(shù)據(jù)備份支持完全備份和增量備份操作。企業(yè)版提供neo4j-backup備份工具功能更豐富。主要采用neo4j-admin命令進(jìn)行數(shù)據(jù)庫備份與恢復(fù),在備份數(shù)據(jù)前需要將以下兩個參數(shù)設(shè)置如下。dbms.backup.enable=true#默認(rèn)值就是truedbms.backup.address=<主機(jī)名/IP>:6362neo4j-admin不僅僅可以用來實現(xiàn)數(shù)據(jù)的備份與恢復(fù),還可以加上不同的子命令參數(shù)實現(xiàn)不同的管理功能。在命令行下輸入以下help子命令可查看幫助>neo4j-adminhelp對于單實例數(shù)據(jù)庫、HA集群、因果集群,過程類似。3.4.2圖數(shù)據(jù)備份與恢復(fù)53數(shù)據(jù)備份與恢復(fù)的dump命令、load命令的用法(1)neo4j-admindump備份數(shù)據(jù),導(dǎo)出整個數(shù)據(jù)庫數(shù)據(jù),需要先停止數(shù)據(jù)庫。neo4j-admindump--database=graph.db--to=C:\backups\graph.db\bak-20190510.dump其中,--database參數(shù)值為要備份的數(shù)據(jù)庫名稱,--to參數(shù)為備份目標(biāo)文件路徑及名稱。(2)采用neo4j-admin,導(dǎo)入整個數(shù)據(jù)庫數(shù)據(jù),需要先停止數(shù)據(jù)庫。neo4j-adminload--from=C:\backups\graph.db\bak-20190510.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論