精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

開源NoSQL數據庫:ArangoDB入門指南

數據庫 其他數據庫
本文這個新手指南會讓你熟悉 ArangoDB。我們將介紹安裝并運行一個本地 ArangoDB 服務器、使用Web界面與之交互、將示例數據存儲在數據庫中等等。

[[209070]]

概述

這個新手指南會讓你熟悉 ArangoDB。我們將介紹,

  • 安裝并運行一個本地 ArangoDB 服務器
  • 使用Web界面與之交互
  • 將示例數據存儲在數據庫中
  • 查詢數據庫以再次檢索數據
  • 編輯和刪除現有數據

安裝

去 arangodb.com/download,選擇您的操作系統并下載 ArangoDB。如果有包管理器,你也可以參考說明如何通過包管理器進行安裝。

在 Linux 下如果您安裝了二進制包,服務器會自動啟動。

在 MacOS X 下,如果你用包管理器 homebrew 安裝 ArangoDB,通過命令啟動服務,/usr/local/sbin/arangod.

在 Windows 下把 ArangoDB 安裝為服務,它會自動啟動。未安裝為服務的情況下,需要運行位于安裝目錄中的 bin 目錄下的 arangod.exe。你可能必須以管理員身份運行,以獲得對 C:\Program Files 目錄的寫權限。

關于安裝 ArangoDB 更深入的信息,以及可用的啟動參數,在集群中安裝等,參閱安裝文檔。

保護安裝

默認安裝包含 _system 數據庫和 root 用戶。

基于 Debian 的軟件包和 Winsows Installer 都會在安裝過程中詢問密碼。基于 RedHat 的軟件包則會設置一個隨機密碼。對于其它安裝包,你需要執行

shell> arango-secure-installation

這會要求輸入一個 root 密碼并保存起來。

Web 界面

服務本身(arangod)是基于 HTTP/REST 的,但是你可以使用圖形化的 Web 界面讓操作變得簡單。還有 arangosh,一個異步 shell,用來與服務器進行交互。如果你是開發者,你可能更喜歡使用 shell 而不是 GUI。目前它還沒有提供像語法高亮這樣的功能。

在項目中開始使用 ArangoDB 的時候,你會尋找官方或社區使用與項目相同語言編寫的驅動。驅動實現了可以在項目編程語言中輕松使用的編程接口,與服務器進行完全地交互。因此,除非你想自己寫驅動或者直接使用原始接口,否則理所當然地,應該忽略 HTTP API。

為了熟悉數據庫系統你可以將驅動放置一邊而使用 web 界面 (代碼名 Aardvark) 進行基本交互. web 界面將會在你啟動 arangod 之后變為可用. 你可以在瀏覽器中通過 http://localhost:8529 進行訪問 – 如果不可以,請查看 故障排除.

默認情況下, 驗證已啟用. 默認用戶為 root. 依據所用的安裝方法,安裝過程會提示輸入 root 密碼或者默認 root 密碼為空 (參看 以上).

 

接下來你會被詢問使用哪個數據庫。所有的服務器實例帶有一個 _system 數據庫. 選擇該數據庫并繼續.

 

然后你會看到如下的服務器統計面板:

 

要了解關于接口的更詳細描述,參看 Web Interface.

數據庫,集合與文檔

數據庫是集合的集合. 集合存儲記錄, 記錄被稱為文檔. 集合等價于 RDBMS 中的表, 而文檔可以被認為是表中的行. 區別在于你不需要預先定義有哪些列 (或者屬性). 任意集合中的所有文檔可以擁有任意的屬性鍵與值. 然而實際上一個集合中的文檔具有相似的結構, 但是數據庫系統本身并不會關心,無論你的數據是什么樣子,數據庫系統都會在其上執行穩定而快速的操作.

現在你可以停留在默認的 _system 數據庫中并使用 web 接口來創建集合與文檔. 點擊 COLLECTIONS 菜單項, 然后選擇 Add Collection 菜單. 為其指定一個名字,例如 users, 保持其他的設置不變 (我們希望它是一個文檔集合) 并保存. 會出現一個標記為 users 的新菜單項, 你可以點擊打開.

目錄還沒有任何文檔. 點擊右側帶有白色加號的綠色圓環來創建該集合中的***個文檔. 對話框會詢問你 _key. 你可以將該區域留空并點擊 Create 來讓數據據系統賦值一個自動生成 (唯一) 的鍵. 注意 _key 屬性是不可修改的, 這意味著一旦文檔被創建你不可以修改該鍵. 你可以用作文檔鍵的內容在命名約定 中有相應的描述.

在這種情況下,自動生成的鍵值也許是 “9883” (_key 總是字符串!), 而文檔 _id 也許是 “users/9883” . 除了一些系統屬性,在文檔中并沒有其他內容. 讓我們通過點擊 (空對象) 左側的圖標添加一個自定義屬性, 然后 添加. 兩個文本輸入框會變得可用, FIELD (屬性鍵) 與 VALUE (屬性值). 輸入名字作為鍵,輸入你的名字作為值. 添加 另一個屬性,將其命名為年齡,并將其設置為你的年齡. 點擊保存來保存這些修改. 如果你點擊 ArangoDB 圖標右側頂點的集合: users , 文檔瀏覽器將會顯示 users 集合中的文檔,而你可以在列表中看到你剛剛創建的文檔.

查詢數據庫

是時候通過AQL(ArangoDB’ query language)ArangoDB查詢語言來取得我們的文檔了。我們可以直接通過我們創建的_id屬性查找文檔(當然我們還可以使用其它選項)。點擊QUERIES菜單欄來顯示query editor(查詢編輯器)輸入以下的內容(具體取決于你的document ID):

  1. RETURN DOCUMENT("users/9883"

然后點擊Execute來啟動查詢,結果如下所示:

  1.   { 
  2.     "_key""9883"
  3.     "_id""users/9883"
  4.     "_rev""9883"
  5.     "age": 32, 
  6.     "name""John Smith" 
  7.   } 
  8.  

結果出現在編輯器下方。如你所見,程序返回了整個文檔,包含著系統屬性。DOCUMENT() 函數會根據你提供的_keys或者_ids返回一系列或者單個文檔。我們管返回的結果叫做查詢結果,它是一個數組,包含了我們的文檔查詢結果(我們可能會得到不只一個文檔,但是即使只有一個文檔結果,它仍然會返回最上層的數組)。

這種類型的查詢稱為數據訪問查詢。這種查詢不會創建、更改或刪除數據。還有另一種類型的查詢,稱為數據修改查詢。讓我們使用修改查詢插入第二個文檔:

  1. INSERT { name"Katie Foster", age: 27 } INTO users 

查詢非常容易看懂: INSERT 關鍵詞告訴ArangoDB我們想插入一些東西。后面緊跟著的是我們要插入的東西,在這個案例中是一個擁有兩個屬性的文檔。 花括號{ } 表示文件,或者說是對象。我們所說的文件是指集合中的記錄。當用JSON編碼時,我們叫它對象。對象也可以嵌套。下面舉個例子:

  1.   "name": { 
  2.     "first""Katie"
  3.     "last""Foster" 
  4.   } 
  5.  

INTO 必須跟在每一個 INSERT 操作后面,后面再接上我們儲存文檔的集合的名字。注意集合的名字不必加上引號。

如果你運行上面的查詢語句,會返回一個空數組,因為你沒有用 RETURN 關鍵詞指定要返回的內容。 RETURN 關鍵詞在修改查詢中是可選項,但在數據訪問查詢中是必選項。就算用上 RESULT,返回值也可能是空數組,比如制定文檔無法找到的情況。盡管結果為空,以上的查詢仍然會創建新用戶文件。你可以在文檔瀏覽器中驗證這一點。

這一次我們新建一個用戶,并且讓新的結果返回。

  1. INSERT { name"James Hendrix", age: 69 } INTO users 
  2.  
  3. RETURN NEW  

NEW 是一個虛擬變量,指的是用INSERT語句新建的文檔。查詢結果如下:

  1.   { 
  2.     "_key""10074"
  3.     "_id""users/10074"
  4.     "_rev""10074"
  5.     "age": 69, 
  6.     "name""James Hendrix" 
  7.   } 
  8.  

現在我們一個有三個用戶了。如何用一條語句返回全部數據呢?下面的方法不起作用:

  1. RETURN DOCUMENT("users/9883"
  2.  
  3. RETURN DOCUMENT("users/9915"
  4.  
  5. RETURN DOCUMENT("users/10074" 

這里僅有一條 RETURN 語句,如果你嘗試執行,則會拋出系統錯誤. DOCUMENT() 函數提供了一個補充簽名來指定多文檔處理,所以我們可以:

  1. RETURN DOCUMENT( ["users/9883""users/9915""users/10074"] ) 

所有3個文檔的帶有 _ids 的數組會被傳遞給函數. 數組通過方括號 [ ] 表示,而其元素使用逗號進行分隔.

但是如果我們添加更多用戶會怎樣呢? 我們同時需要修改查詢來獲取新添加的用戶. 關于我們的查詢,我們希望表達的是: “對于 users 集合中的每一個用戶, 返回用戶文檔”. 我們可以使用 FOR 循環格式化該查詢:

  1. FOR user IN users 
  2.  
  3. RETURN user  

它表達的是對 users 中的所有文檔進行迭代并使用user 作為變量名, 從而我們可以用來指代當前用戶文檔. 它可以被稱為 doc, u 或 ahuacatlguacamole, 這取決于你. 然而建議使用一個簡短并自描述的名字.

循環體告訴系統返回變量 user 的值, 這是一個用戶文檔. 可以像下面這樣返回所有用戶文檔:

  1.   { 
  2.     "_key""9915"
  3.     "_id""users/9915"
  4.     "_rev""9915"
  5.     "age": 27, 
  6.     "name""Katie Foster" 
  7.   }, 
  8.   { 
  9.     "_key""9883"
  10.     "_id""users/9883"
  11.     "_rev""9883"
  12.     "age": 32, 
  13.     "name""John Smith" 
  14.   }, 
  15.   { 
  16.     "_key""10074"
  17.     "_id""users/10074"
  18.     "_rev""10074"
  19.     "age": 69, 
  20.     "name""James Hendrix" 
  21.   } 
  22.  

也許你已經注意到返回的文檔順序與插入順序并不相同. ArangoDB 并不保證文檔順序,除非你顯式對其進行排序. 我們可以很容易添加了一個 SORT 操作:

  1. FOR user IN users 
  2.  
  3. SORT user._key 
  4.  
  5. RETURN user  

這依然不會返回預期的結果: James (10074) 會在 John (9883) 與 Katie (9915) 之前返回. 原因在于 _key 屬性在 ArangoDB 中是一個字符串,而不是一個數字. 字符串的單個字符會被進行比較. 1 小于 9 ,因而結果是 “正確”的. 如果我們希望使用數值作為 _key 屬性的值,我們可以將字符串轉換為數字并用其進行排序. 然而這樣做有一些影響T. 我們***排序其他內容. 年齡怎么樣?以降序排列嗎?

  1. FOR user IN users 
  2.  
  3. SORT user.age DESC 
  4.  
  5. RETURN user  

用戶的數據會以如下的順序返回: James (69), John (32), Katie (27)。與用DESC返回降序結果不同, ASC返回升序結果。 ASC是默認的選項,可以省略。

我們可能需要根據用戶的年齡返回一個子集。讓我們返回30歲以上的用戶的數據:

  1. FOR user IN users 
  2.  
  3. FILTER user.age > 30 
  4.  
  5. SORT user.age 
  6.  
  7. RETURN user  

這么做會按順序返回John and James。 Katie’s age的屬性不滿足三十歲以上的條件,她只有27歲,因此不再結果之中。我們可以修改她的年齡,使她重新包含在返回結果之中,使用如下的查詢語句:

  1. UPDATE "9915" WITH { age: 40 } IN users 
  2.  
  3. RETURN NEW  

UPDATE 允許部分編輯已存在的文檔. 另外有 REPLACE, 會移除所有屬性 (除了 _key 與 _id 保持不變) 并且僅添加部分屬性. 另一方面 UPDATE 替換指定的屬性而保持其他屬性不變.

UPDATE 關鍵字后跟文檔鍵 (或者帶有 _key 屬性的文檔 / 對象) 來指定要修改的文檔. 要更新的屬性作為對象使用 WITH關鍵字寫入. IN 表示在哪個集合中執行該操作, 類似 INTO (這里兩個關鍵字可以互換). 如果我們使用 NEW 偽變量則會返回應用修改的全部文檔:

  1.   { 
  2.     "_key""9915"
  3.     "_id""users/9915"
  4.     "_rev""12864"
  5.     "age": 40, 
  6.     "name""Katie Foster" 
  7.   }  

相反如果我們使用 REPLACE , name 屬性會丟失. 使用 UPDATE, 屬性會被保留 (如果我們有其他的屬性,也同樣適用該規則).

讓我們再次運行 FILTER 查詢, 但是這一次僅返回用戶名:

  1. FOR user IN users 
  2.  
  3. FILTER user.age > 30 
  4.  
  5. SORT user.age 
  6.  
  7. RETURN user.name  

這會返回所有3個用戶的名字:

  1.  
  2. "John Smith"
  3.  
  4. "Katie Foster"
  5.  
  6. "James Hendrix" 
  7.  
  8.  

如果僅返回一個屬性的子集,則將其稱為投影. 另一種投影類型是改變結果的結構:

  1. FOR user IN users 
  2.  
  3. RETURN { userName: user.name, age: user.age }  

該查詢為所有的用戶文檔定義了輸出格式. 用戶名作為 userName 返回,而不是 name, 在該示例中 age 與屬性性鍵相同:

  1.   { 
  2.     "userName""James Hendrix"
  3.     "age": 69 
  4.   }, 
  5.   { 
  6.     "userName""John Smith"
  7.     "age": 32 
  8.   }, 
  9.   { 
  10.     "userName""Katie Foster"
  11.     "age": 40 
  12.   } 

也可以計算新值:

  1. FOR user IN users 
  2.  
  3. RETURN CONCAT(user.name"'s age is "user.age)  

CONCAT() 是一個將元素合并為字符串的函數. 在這里我們用其為所有用戶返回一個描述. 正如你看到的,結果集合并不總是一個對象數組:

  1.  
  2. "James Hendrix's age is 69"
  3.  
  4. "John Smith's age is 32"
  5.  
  6. "Katie Foster's age is 40" 
  7.  
  8.  

現在讓我們來做一些瘋狂的事情: 對于用戶集合中的所有文檔,再次對所有用戶文檔進行迭代并返回用戶組合,例如 John 與 Katie. 對于該問題,我們可以在一個循環內部使用一個循環來獲得叉積 (所有用戶記錄的所有可能組合, 3 3 = 9). 然而我們并不希望得到類似 John + John* 的組合, 所以讓我們使用一個過濾器條件來去除類似的組合:

  1. FOR user1 IN users 
  2.  
  3. FOR user2 IN users 
  4.  
  5. FILTER user1 != user2 
  6.  
  7. RETURN [user1.name, user2.name 

我們得到6對組合。類似 James + John 與 John + James 的組合是重復的,但是已足夠好:

  1.   [ "James Hendrix""John Smith" ], 
  2.   [ "James Hendrix""Katie Foster" ], 
  3.   [ "John Smith""James Hendrix" ], 
  4.   [ "John Smith""Katie Foster" ], 
  5.   [ "Katie Foster""James Hendrix" ], 
  6.   [ "Katie Foster""John Smith" ] 
  7.  

我們可以像下面這樣計算兩個年齡之和并計算一些新的內容:

  1. FOR user1 IN users 
  2.   FOR user2 IN users 
  3.     FILTER user1 != user2 
  4.     RETURN { 
  5.         pair: [user1.name, user2.name], 
  6.         sumOfAges: user1.age + user2.age 
  7.     }  

我們引入一個新的屬性 sumOfAges 并將兩個年齡相加作為其值:

  1.   { 
  2.     "pair": [ "James Hendrix""John Smith" ], 
  3.     "sumOfAges": 101 
  4.   }, 
  5.   { 
  6.     "pair": [ "James Hendrix""Katie Foster" ], 
  7.     "sumOfAges": 109 
  8.   }, 
  9.   { 
  10.     "pair": [ "John Smith""James Hendrix" ], 
  11.     "sumOfAges": 101 
  12.   }, 
  13.   { 
  14.     "pair": [ "John Smith""Katie Foster" ], 
  15.     "sumOfAges": 72 
  16.   }, 
  17.   { 
  18.     "pair": [ "Katie Foster""James Hendrix" ], 
  19.     "sumOfAges": 109 
  20.   }, 
  21.   { 
  22.     "pair": [ "Katie Foster""John Smith" ], 
  23.     "sumOfAges": 72 
  24.   } 
  25.  

如果我們希望過濾新屬性來僅返回總和小于100的組合,我們應該定義一個變量來臨時存儲總和,從而我們可以在 FILTER 語句以及 RETURN 語句中使用:

  1. FOR user1 IN users 
  2.   FOR user2 IN users 
  3.     FILTER user1 != user2 
  4.     LET sumOfAges = user1.age + user2.age 
  5.     FILTER sumOfAges < 100 
  6.     RETURN { 
  7.         pair: [user1.name, user2.name], 
  8.         sumOfAges: sumOfAges 
  9.     }  

LET 關鍵字后跟指定的變量名 (sumOfAges), 然后是 = 符號與值或表達式來定義變量的值. 在這里我們重用我們的表達式來計算總和. 然后我們使用另一個 FILTER 來略過不需要的組合并使用我們之前聲明的變量. 我們使用用戶名與所計算的年齡值的數組返回一個投影,為些我們再次使用變量:

  1.   { 
  2.     "pair": [ "John Smith""Katie Foster" ], 
  3.     "sumOfAges": 72 
  4.   }, 
  5.   { 
  6.     "pair": [ "Katie Foster""John Smith" ], 
  7.     "sumOfAges": 72 
  8.   } 
  9.  

小貼士: 當定義對象時, 如果所要求的屬性鍵與屬性值所用的變量相同i, 你可以使用簡寫形式: { sumOfAges } 替代 { sumOfAges: sumOfAges }.

***,讓我們刪除一個用戶文檔:

  1. REMOVE "9883" IN users 

它會刪除用戶 John (_key: “9883”). 我們也可以在循環中移除文檔 (同樣適用于 INSERT, UPDATE 與 REPLACE):

  1. FOR user IN users 
  2.     FILTER user.age >= 30 
  3.     REMOVE user IN users  

該查詢會刪除年齡大于等于 30 的所有用戶.

如何繼續

在AQL 中可探索更多內容以及 ArangoDB 提供的更多功能. 繼續閱讀其他章節并使用測試數據庫試驗以促進你的知識.

如果你希望立即編寫更多的 AQL 查詢,請查看:

  • 數據查詢: 數據訪問與修改查詢
  • 高級操作: FOR, FILTER 的詳細描述以及該簡介中未涉及的更多操作
  • 函數: 所提供函數的參數

ArangoDB程序

ArangoDB包有以下程序:

  • arangod: ArangoDB數據庫守護進程. 此服務器程序旨在作為守護程序進程運行,并通過TCP / HTTP向各種客戶端連接到服務器。
  • arangosh: ArangoDB shell. 客戶端實現read-eval-print-Loop(REPL)并提供函數來訪問和管理ArangoDB服務器。
  • arangoimp: ArangoDB服務器的 批量導入器 。它支持JSON和CSV。
  • arangodump:以JSON格式創建ArangoDB數據庫備份 的工具。
  • arangorestore: 將備份數據加載回ArangoDB數據庫的工具。
  • arango-dfdb: ArangoDB的數據文件調試器。它主要用于開發ArangoDB。
  • arangobench: A基準測試工具。 它可以用于性能和服務器功能測試。 
責任編輯:龐桂玉 來源: 36大數據
相關推薦

2011-07-19 09:08:50

JavaNoSQL

2024-02-02 10:51:53

2019-03-20 14:44:53

數據庫MySQLExcel

2023-07-28 08:27:03

MongoDB數據庫

2021-09-28 09:25:05

NoSQL數據庫列式數據庫

2011-10-09 09:38:03

OracleNoSQL

2019-03-20 15:59:11

NoSQLRedis數據庫

2010-04-01 09:45:38

NoSQL

2019-07-08 10:36:34

數據庫WebNoSQL

2024-03-28 09:00:00

NoSQL數據庫

2011-07-13 09:58:15

HBase

2011-04-14 11:14:21

OracleNoSQLMySQL

2019-07-23 11:41:45

數據庫SQLDocker

2011-03-25 14:40:29

Trinity數據庫

2014-02-27 10:08:33

NoSQL

2011-05-16 10:29:44

HandlerSockNoSQL

2023-03-05 16:25:38

NoSQL數據庫

2020-10-31 22:01:40

NoSQL數據庫

2025-01-10 09:25:10

NOSQL數據庫ACID

2017-05-25 10:11:46

數據庫令牌節點
點贊
收藏

51CTO技術棧公眾號

99精品久久免费看蜜臀剧情介绍| 99久久影视| 日韩欧美一区二区三区| 亚洲电影网站| 午夜精品久久久久久久99老熟妇 | 欧美日韩综合一区二区三区| 999久久久精品国产| 亚洲第一精品夜夜躁人人躁| 男人搞女人网站| 丰满诱人av在线播放| 国产午夜精品久久久久久久 | 日本激情视频在线播放| 日皮视频在线观看| 国产女同性恋一区二区| 国产日韩精品久久| 国产又黄又粗又长| 久久久xxx| 欧美激情精品久久久久久变态| 男人天堂av电影| 97品白浆高清久久久久久 | 国内老熟妇对白xxxxhd| 另类图片国产| 97在线视频免费播放| 精品国产大片大片大片| 蜜臀av免费一区二区三区| 日韩欧美三级在线| 中文字幕国产免费| 希岛爱理一区二区三区av高清| 亚洲大片精品永久免费| 亚洲一区二区三区乱码| 国产在线视频网址| 91亚洲精品久久久蜜桃| 国产精品9999久久久久仙踪林| 亚洲影视一区二区| 日本 国产 欧美色综合| 国产精品99蜜臀久久不卡二区| 日本在线视频中文字幕| 欧美福利视频| 不卡中文字幕av| 成人性视频免费看| 日韩精品久久久久久久电影99爱| 亚洲乱码国产乱码精品精| 国产香蕉精品视频| 91国内精品| 精品欧美一区二区久久| 麻豆网站免费观看| 日韩有吗在线观看| 日韩写真欧美这视频| www激情五月| 99亚洲男女激情在线观看| 欧美日韩一区久久| 岛国毛片在线播放| 亚洲精品成人一区| 555夜色666亚洲国产免| 色黄视频免费看| 日本综合精品一区| 精品日韩欧美在线| 精品人妻在线视频| 九色丨蝌蚪丨成人| 亚洲国产精久久久久久久| 超碰caoprom| 亚洲精品无吗| 一区二区欧美亚洲| 成人欧美一区二区三区黑人一| 日韩成人影院| 久久中文字幕在线| 久久国产一级片| 在线成人h网| 欧美亚洲国产视频小说| 国产黄色免费视频| 精品中文av资源站在线观看| 亚洲free性xxxx护士hd| 亚洲精品一级片| av综合在线播放| 色噜噜色狠狠狠狠狠综合色一| 国产福利免费在线观看| 亚洲人妖av一区二区| 日本丰满大乳奶| av影视在线| 色婷婷精品大在线视频| 亚洲天堂网2018| 18国产精品| 亚洲精品视频播放| 三上悠亚在线观看视频| 狠狠88综合久久久久综合网| 欧美在线性视频| 一区二区日韩视频| 成人av资源站| 亚洲免费在线精品一区| 黄色污污视频在线观看| 欧美亚洲综合色| 久久久久久久久久久影视| 日韩高清三区| 久久精品2019中文字幕| 亚洲国产成人精品激情在线| 麻豆国产精品视频| 国产精品一区二区你懂得| 国产一区电影| 亚洲一区二区三区三| 国产精品天天av精麻传媒| 99tv成人影院| 亚洲免费一在线| 天天看片中文字幕| 日韩av一级电影| 丁香婷婷久久久综合精品国产| 国产高清视频免费最新在线| 亚洲国产日日夜夜| 香蕉视频999| 亚洲人成伊人成综合图片| 久久精品视频亚洲| 成人免费视频国产免费| 成人免费毛片嘿嘿连载视频| 一区二区三区欧美在线| 中文字幕不卡三区视频| 精品乱码亚洲一区二区不卡| 成人精品一二三区| 久久看片网站| 国产伦精品一区二区三区免| 免费黄网站在线播放| 色婷婷综合久久久中文字幕| jjzzjjzz欧美69巨大| 中文无码久久精品| 国产美女搞久久| 国产色在线 com| 色综合天天综合网天天看片| 国产xxx在线观看| 亚州av乱码久久精品蜜桃| 国产成人精品久久| 亚洲 小说区 图片区 都市| 夜夜嗨av一区二区三区网页| 久久久精品高清| 日韩专区精品| 国产精品视频中文字幕91| 欧美理论在线观看| 狠狠做深爱婷婷久久综合一区| 午夜福利三级理论电影| 国精品一区二区| 成人羞羞视频免费| 亚洲卡一卡二| 日韩欧美国产综合一区 | 7788色淫网站小说| 黑丝一区二区三区| 国产美女在线精品免费观看| 牛牛精品在线视频| 日韩精品专区在线影院观看| 国模无码国产精品视频| 国产精品一区免费视频| 真人做人试看60分钟免费| 精品一区二区三区在线观看视频| 久久综合免费视频| 精品国产伦一区二区三区| 亚洲乱码精品一二三四区日韩在线| 国产喷水theporn| 91精品观看| 99高清视频有精品视频| 欧美日韩经典丝袜| 精品国产sm最大网站| 日韩伦人妻无码| 久久久久九九视频| 五月天激情视频在线观看| 日韩在线欧美| 成人在线视频网址| 国产高清视频色在线www| 日韩精品视频在线观看网址| 无码人妻精品一区二区50| 亚洲国产精品传媒在线观看| 成年人三级黄色片| 国产精品草草| 鲁丝一区二区三区免费| 韩国精品主播一区二区在线观看| 色av中文字幕一区| 精品人妻一区二区三区含羞草| 亚洲国产一区二区a毛片| 中出视频在线观看| 免费视频最近日韩| 强开小嫩苞一区二区三区网站| 电影一区二区在线观看| 国产精品99蜜臀久久不卡二区| 国产黄色小视频在线| 亚洲国产精品va在线看黑人| 高潮毛片又色又爽免费| 综合分类小说区另类春色亚洲小说欧美| 黑人无套内谢中国美女| 久久午夜av| 午夜久久久久久久久久久| 日韩中出av| 成人欧美一区二区三区在线| av男人的天堂在线观看| 在线性视频日韩欧美| 黄色av小说在线观看| 欧美在线视频不卡| 久久亚洲AV无码| 欧美国产国产综合| 中文字幕无人区二| 蜜桃一区二区三区在线观看| 大荫蒂性生交片| 秋霞欧美视频| 久久精品国产综合精品| 日韩精品一页| 日韩av观看网址| 免费电影网站在线视频观看福利| 亚洲天堂av女优| 日本高清视频在线| 欧美日韩精品欧美日韩精品一| 日韩免费一级片| 亚洲视频一区二区在线观看| 人妻体内射精一区二区| 国产99久久久久久免费看农村| 99视频在线免费| 亚洲福利免费| 99久re热视频精品98| 欧美三级三级| 免费在线一区二区| 国产精品对白| 91日韩久久| 亚洲网站三级| 国产欧美日韩91| 美女网站视频一区| 57pao精品| 丁香花在线电影| 另类色图亚洲色图| 在线播放麻豆| 一本一道久久a久久精品逆3p| 日本免费网站在线观看| 日韩欧美中文字幕一区| 91精品中文字幕| 欧美三级午夜理伦三级中视频| 一二三区免费视频| 欧美日韩国产在线| 国产午夜精品无码| 一区二区欧美视频| 亚洲国产精品久| 亚洲激情自拍视频| 日韩在线观看视频一区二区| ...xxx性欧美| 日本午夜在线观看| 亚洲色图欧洲色图婷婷| 欧美另类videoxo高潮| 1区2区3区精品视频| 日本黄色免费片| 亚洲欧洲日韩综合一区二区| 国产传媒免费在线观看| 《视频一区视频二区| 日韩va亚洲va欧美va清高| 亚洲乱码国产乱码精品精可以看| 成人免费精品动漫网站| 亚洲卡通欧美制服中文| 欧美日韩在线视频免费| 亚洲激情图片一区| 精品一区二区三区四| 亚洲成人av一区二区三区| 国产午夜激情视频| 日韩欧美在线视频| 91亚洲国产精品| 丰满肉嫩西川结衣av| 噜噜爱69成人精品| 精品在线视频一区二区三区| 精品嫩草影院| 蜜桃精品久久久久久久免费影院 | 最新一区二区三区| 亚洲精选在线视频| 精品少妇theporn| 精品国产电影一区| 波多野结衣一二区| 欧美日韩国产系列| 国产高清精品软件丝瓜软件| 欧美男人的天堂一二区| 超碰在线观看av| 日韩av在线网址| 成人高潮成人免费观看| 久久精品国产亚洲精品| a级影片在线观看| 97免费视频在线| 成人久久网站| 翡翠波斯猫1977年美国| 亚洲视频分类| 宅男在线精品国产免费观看| 一区在线视频| 久久久久久三级| 国产成人一区在线| 欧美精品黑人猛交高潮| 日本一区二区高清| 亚洲国产精品成人无久久精品| 狠狠躁夜夜躁人人躁婷婷91| 97人妻精品一区二区三区视频 | 97视频在线观看网站| 伦理中文字幕亚洲| 小h片在线观看| 91免费版网站入口| 先锋影音国产精品| 中文字幕一区二区三区四区五区六区 | 国产免费999| 国产成人高清在线| 怡红院一区二区三区| 亚洲亚洲精品在线观看| 国产女优在线播放| 337p日本欧洲亚洲大胆精品| 成人精品一区二区| 国外成人免费在线播放| 国产亚洲精品精品国产亚洲综合| 国产欧美一区二区视频| 99成人在线视频| 国产美女三级视频| 成人永久免费视频| 91久久久久久久久久久久久久| 激情成人在线视频| 99久久精品免费看国产交换| 亚洲天堂成人在线| 91九色porn在线资源| 91精品在线观看视频| 精品日韩免费| 久久精品国产精品亚洲色婷婷| 国产福利一区二区三区视频 | 日韩中字在线| 无遮挡又爽又刺激的视频| 成人激情视频网站| 免费人成视频在线| 91精品国产免费| 在线播放毛片| 国产精品久久久久久av福利| 欧美一区 二区| 男女日批视频在线观看| 国产伦精品一区二区三区免费迷| 黄色av免费播放| 欧美视频在线观看免费| 天天操天天干天天舔| 欧美日韩国产91| 日韩黄色av| 99亚洲国产精品| 国产一区二区影院| 国产精品久久久免费看| 欧美无砖砖区免费| 成年网站在线| 国产盗摄xxxx视频xxx69| 美女毛片一区二区三区四区最新中文字幕亚洲| 人妻激情另类乱人伦人妻 | 菠萝菠萝蜜网站| 亚洲一区二区美女| 亚洲美女福利视频| 欧美黑人巨大xxx极品| 激情综合五月| 中国黄色录像片| 成人涩涩免费视频| 日韩欧美性视频| 日韩国产高清污视频在线观看| 桃色av一区二区| 欧美色图亚洲自拍| 久久午夜激情| 精品少妇一区二区三区密爱| 欧美精品日韩综合在线| 搞黄网站在线观看| 99视频在线播放| 99精品国产福利在线观看免费| 亚洲AV无码国产精品| 欧美性猛交xxxxx水多| 蜜桃免费在线| 国产欧美精品一区二区三区介绍| 国产精品99视频| 91精品人妻一区二区三区四区| 亚洲v中文字幕| 久久精品蜜桃| 成人国产精品日本在线| 亚洲欧美一级二级三级| 扒开伸进免费视频| 色天使色偷偷av一区二区| 国产系列电影在线播放网址| 国产日韩在线看| 精品1区2区3区4区| 国产免费看av| 7777女厕盗摄久久久| 草草视频在线观看| 色一情一乱一伦一区二区三欧美 | 丰满少妇一区二区| 欧美在线观看视频一区二区三区| 日本在线免费| 国产精品免费在线| 久久一区中文字幕| 欧美手机在线观看| 亚洲国产精品va在线观看黑人| 写真福利精品福利在线观看| 黄色影视在线观看| 91视频www| 国产高清免费av| 奇米四色中文综合久久| 中文字幕免费一区二区| 亚洲精品在线视频免费观看 | 日本精品999| 国产精品第一视频| 欧美.日韩.国产.一区.二区| 国产精品揄拍100视频| 欧美精品视频www在线观看 | 国产欧美一区二区三区久久| 激情婷婷亚洲| 国产又粗又猛又爽又黄的视频四季| 日韩欧美一区中文| 日韩毛片免费观看| 精品久久久久久无码中文野结衣| 欧美国产精品一区二区| 熟妇人妻av无码一区二区三区| 成人av在线亚洲|