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

為什么你應該在你下個 Ruby APP 中使用 Neo4j

開發 后端
每天,我都需要儲存大量的數據,而我可以使用很多工具,比如 PostgreSQL,MySQL,SQLite,Redis 和 MongoDB,當我積累了豐富的經驗,并且熟練掌握這些工具的時候,我就不認為他們還有什么樂趣了。

每天,我都需要儲存大量的數據,而我可以使用很多工具,比如 PostgreSQL,MySQL,SQLite,Redis 和 MongoDB,當我積累了豐富的經驗,并且熟練掌握這些工具的時候,我就不認為他們還有什么樂趣了。我從心里熱愛 Ruby,是因為它很有趣并且能讓我能用自己的方式做一些很厲害的事情。但是我并沒有意識到這樣的數據處理工具將會影響我很久,盡管它令我找到了新的樂 趣,所以請讓我向你介紹 Neo4j 吧。

什么是 Neo4j?

Neo4j 是圖形化的數據庫!這意味著它被優化用于管理和查詢實體(節點)之間的關系(節點),而不是像一個使用表的關系數據庫那樣的東西。

為什么這很棒?想象一個沒有國外鑰匙的世界。數據庫中的每個實體的關系之間都十分密切,以至于可以直接引用其他實體。如果你想要引用的關系沒有關系 表或者搜索掃面,就只需要幾個鏈接就行了。這***的展現了典型的對象模型。這非常令人興奮,因為 Neo4j 可以提供很多我們所期待的數據庫應該具有的功能,并且為我們提供了工具來查詢復雜數據圖形。

介紹 ActiceNote

為了鏈接 Neo4j,我們將使用 neo4j gem。連接到你在 Rails 應用程序中的 Neo4j 的方法,可以在 gem  文檔中找到。同時此顯示代碼的應用程序也可在 GitHub 庫中運行 Rails 應用程序(使用 sitepoint 的分支)你可以在你的數據庫中運行使用前 rake load_sample_data 命令來填充數據庫。

下面是一個關于資產模型的基本案例來源于資產管理的Rails APP

 

  1. class Asset 
  2.   include Neo4j::ActiveNode 
  3.  
  4.   property :title 
  5.  
  6.   has_many :out, :categories, type: :HAS_CATEGORY 
  7. end 

簡單解釋一下:

1.Neo4j的GEM給我們的Neo4j:: ActiveNode模塊,其中包括我們所做的這個模型

2.此資產意味著這種模式將負責所有在Neo4j標記資產的節點(除標簽一個節點可以有很多的標簽發揮類似的作用)

3.我們有一個title屬性來描述各個節點

4.我們有傳出has_many的分類關聯。這種關聯幫助我們通過下面的數據庫HAS_CATEGORY關系找到分類的對象。

有了這個模型,我們可以進行基本的查詢來找到一個資產,并得到它的分類

  1. 2.2.0 :001 > asset = Asset.first 
  2.  => #<Asset uuid: "0098d2b7-a577-407a-a9f2-7ec4153cfa60", title: "ICC World Cup 2015 "
  3. 2.2.0 :002 > asset.categories.to_a 
  4.  => [#<Category uuid: "91cd5369-605c-4aff-aad1-b51d8aa9b5f3", name: "Classification">] 

熟悉 ActiveRecord 或者 Mongoid 的任何人會看到找個上百次。為了讓它變得更有趣,讓我們來定義一個 Category 模型:

  1. class Category 
  2.   include Neo4j::ActiveNode 
  3.  
  4.   property :name 
  5.  
  6.   has_many :in, :assets, origin: :categories 
  7. end 

在這里,我們的關聯有一個 origin 的選項引用了 資產(asset)模型的 categories 關聯。如果我們想要的話,我們可以再一次指定 type: :HAS_CATEGORY

創建Recommendations

如果我們想要獲得所有和我們的 資產共享一個 category 的所有 資產(asset)會怎樣?

  1. 2.2.0 :003 > asset.categories.assets.to_a 
  2.  => [#<Asset uuid: "d2ef17b5-4dbf-4a99-b814-dee2e96d4a09", title: "WineGraph">, ...] 

那這樣又會發生什么事?ActiveNode 生成一個數據庫查詢,指定了一個從我們的 資產(asset)到所有其他共享一個 category 的 資產(asset)的路徑。然后數據庫會發回那些 資產(asset)給我們。下面給出它用到的查詢:

  1. MATCH 
  2.   asset436, asset436-[rel1:`HAS_CATEGORY`]->(node3:`Category`), 
  3.   node3<-[rel2:`HAS_CATEGORY`]-(result_assets:`Asset`) 
  4. WHERE (ID(asset436) = {ID_asset436}) 
  5. RETURN result_assets 
  6.  
  7. Parameters: {ID_asset436: 436

這種查詢語言叫做 Cypher,它等同于 Neo4j 的 SQL。特別注意括號周圍節點和接頭的 ASCII 風格所代表的關系。這種 Cypher 查詢有點冗余,因為 ActiveNode 在算法上面會生成這些查詢。如果一個人去寫這種查詢,它將會看起來像這樣:

  1. MATCH source_asset-[:HAS_CATEGORY]->(:Category)<-[:HAS_CATEGORY]-(result_assets:Asset) 
  2. WHERE ID(source_asset) = {source_asset_id} 
  3. RETURN result_assets 
  4.  
  5. Parameters: {source_asset_id: 436

同時,我也發現 Cypher 比 SQL 要容易并且更強大, 但是我們在這里我們不會擔心 Cypher 太多。如果你之后想學習更過關于 Cypher 的知識,你可以查找 totorials refcard

正如你所看到的,我們可以使用 Neo4j 來跨實體。太了不起了!我們也可以使用帶有成對 JOINS 的 SQL 來做到。雖然 Cypher 看起來很酷,但是我們還沒有什么重大的突破。假設我們想要使用這些查詢來創建一些基于共享 category 的 asset recommendation 會怎樣?我們會想要去對 asset 排序然后按照最多共同 category 來排序。讓我們在我們的模型中創建一個方法:

  1. class Asset 
  2.   ... 
  3.  
  4.   Recommendation = Struct.new(:asset, :categories, :score) 
  5.  
  6.   def asset_recommendations_by_category(common_links_required = 3
  7.     categories(:c) 
  8.       .assets(:asset) 
  9.       .order('count(c) DESC'
  10.       .pluck('asset, collect(c), count(c)').reject do |_, _, count| 
  11.       count < common_links_required 
  12.     end.map do |other_asset, categories, count| 
  13.       Recommendation.new(other_asset, categories, count) 
  14.     end 
  15.   end 
  16. end 

這里有幾個有趣的地方值得注意一下:

  • 我們定義變量作為后續使用鏈的一部分(c 或者 asset)

  • 我們使用 Cypher 的 collect 函數來給我們一個包含一個共享 category 數組的結果列(參考下面的表)。還要注意,我們得到了完整的對象,不僅僅是列/屬性:

asset

collect(c)

count(c)

#<Asset>

[#<Category>]

1

#<Asset>

[#<Category>, #<Category>, …]

4

#<Asset>

[#<Category>, #<Category>]

2

你注意到這里沒有一個 GROUP BY 字句了嗎?Neo4j 非常智能地意識到 collect 和 count 是聚合函數,并且在我們的結果中通過非聚合列排序(在這個案例中只有 asset變量)。

注意那條 SQL!

作為***一步,我們能夠創建的不僅僅是相同 category 的 recommendation。想象一下我們有下面 Neo4j 子圖:

為什么你應該在你下個 Ruby APP 中使用 Neo4j

除了共享的 category 之外,讓我們來解釋一下 creators 和 viewers asset 有多少共同之處:

  1. class Asset 
  2.   ... 
  3.   Recommendation = Struct.new(:asset, :score) 
  4.  
  5.   def secret_sauce_recommendations 
  6.     query_as(:source) 
  7.       .match('source-[:HAS_CATEGORY]->(category:Category)<-[:HAS_CATEGORY]-(asset:Asset)').break 
  8.       .optional_match('source<-[:CREATED]-(creator:User)-[:CREATED]->asset').break 
  9.       .optional_match('source<-[:VIEWED]-(viewer:User)-[:VIEWED]->asset'
  10.       .limit(5
  11.       .order('score DESC'
  12.       .pluck( 
  13.         :asset, 
  14.         '(count(category) * 2) + (count(creator) * 4) + (count(viewer) * 0.1) AS score').map do |other_asset, score| 
  15.       Recommendation.new(other_asset, score) 
  16.     end 
  17.   end 
  18. end 

在這里我們深入研究并開始構建我們自己的查詢。結構一樣,但不僅僅是通過在共享 category 的兩個 asset 之間查找一條path, 我們也會指定兩個更多的可選path。我們可以指定三個可選path,但是 Neo4j 需要使用數據庫里邊每一個其他的 資產(asset) 來對比我們的 資產(asset)。為我們的 category 節點使用 match 而不是 optional_match,我們要求至少有一個共享 category。這樣極大的限制了我們的搜索空間。

在圖中有1個共享 category,0個共享 creator 以及兩個共享的 viewer。這意味著”Ruby“和”Ruby on Rails“之間的分數將會是:

(1*2) + (0*4) + (2*0.1) =2.2

還要注意,我們在這三條path上的 count 聚合函數上做計算(和排序)。對我來說很酷,它使得我有點興奮地去思考。。。

容易授權

讓我們來處理另外一個普遍的問題。假設你的 CEO 來到你桌子前對你說,“我們已經構建了一個非常棒的 app,但是客戶想要能夠控制誰可以看他們的東西。你可以建立一些隱私控制嗎?”看起來很簡單。讓我們依賴一個標記來訪問私有資產(asset):

  1. class Asset 
  2.   ... 
  3.   property :publicdefaulttrue 
  4.  
  5.   def self.visible_to(user) 
  6.     query_as(:asset) 
  7.       .match_nodes(user: user) 
  8.       .where("asset.public OR asset<-[:CREATED]-user"
  9.       .pluck(:asset) 
  10.   end 
  11. end 

使用這些設計,你可以顯示用戶可以看到的所有資產(asset),因為資產(asset)是公開的或者因為觀察者擁有它。沒問題,但同樣不是個大問題。在另外一個數據庫里邊,你可以在兩個列/屬性上面做搜索。讓我們來感受一下!

產品經理來到你身邊說,“嘿,謝謝你,但是現在人們想要給其他用戶直接訪問他們私有的東西”。沒問題!你可以創建以個 UI 來讓用戶添加和移除他們資產(asset)的 VIEWALBE_BY 關系,并且可以這樣查詢:

  1. class Asset 
  2.   ... 
  3.  
  4.   def self.visible_to(user) 
  5.     query_as(:asset) 
  6.       .match_nodes(user: user) 
  7.       .where("asset.public OR asset<-[:CREATED]-user OR asset-[:VIEWABLE_BY]->user"
  8.       .pluck(:asset) 
  9.   end 
  10. end 

另外這將是一個連接表。你仍在用戶可以獲取資產(asset)的另外一個路徑。花費一些時間來欣賞 Neo4j 無模式的本質。

滿足于你的工作日,靠在椅子上和喝著下午茶。當然,前提是社交媒體客戶服務代表說“用戶喜歡新的功能,但是他們希望能夠創建分組以及分配訪問分組。 你可以做到嗎?并且,能允許任意層次的分組嗎?你深深得看著他們的眼睛幾分鐘,然后說:”當然!“。之后開始變得復雜,來看個例子:

為什么你應該在你下個 Ruby APP 中使用 Neo4j

如果這些資產都是私人代碼,到目前為止給 Matz 和 tenderlove 去訪問 Ruby,以及 DHH 去訪問 Ruby on Rails。添加分組支持,你開始直接分配分組:

 

  1. class Asset 
  2.   ... 
  3.  
  4.   def self.visible_to(user) 
  5.     query_as(:asset) 
  6.       .match_nodes(user: user) 
  7.       .where("asset.public 
  8.  OR asset<-[:CREATED]-user OR asset-[:VIEWABLE_BY]->user OR  
  9. asset-[:VIEWABLE_BY]->(:Group)<-[:BELONGS_TO]-user") 
  10.       .pluck('DISTINCT asset'
  11.   end 
  12. end 

這個是很簡單的,因為你只需要添加另外一條路徑。當然,到目前為止那是我們的舊帽子。 Tenderlove 和 Yehuda 就能夠看到”Ruby on Rails“資源(asset),因為他們是“Railsists”分組的。還要注意:現在一些用戶有多個資產(asset)路徑(像 Matz 去 Ruby 通過 Rubyists 分組和通過 CREATED 關聯)你需要返回 DISTINCT asset。

然而通過一個層次結構組織來指定一個任意的path需要花費你較多的時間。你可以查看Neo4j文檔直到你找到一些叫做”variable relationships“的東西并試試:

 

  1. class Asset 
  2.   ... 
  3.  
  4.   def self.visible_to(user) 
  5.     query_as(:asset) 
  6.       .match_nodes(user: user) 
  7.       .where("asset.public OR asset<-[:CREATED]-user OR asset-[:VIEWABLE_BY] 
  8.       ->user OR asset-[:VIEWABLE_BY]->(:Group)<-[:HAS_SUBGROUP*0..5]-(:Group)<-[:BELONGS_TO]-user") 
  9.       .pluck('DISTINCT asset'
  10.   end 
  11. end 

這里你已經做到了!這種查詢會找到可訪問一個 group 的 資產(asset)并且貫穿了0到5的 HAS_SUBGROUP關系,***以一個查看用戶是否在***一個 group 里邊的檢查結束。你是這個故事的男主角,你的公司會為你能夠快速做好這項工作而給你獎金。

結論

你可以用 Neo4j 做很多我做不到并且很棒的事情(包括使用它的 amazing web interface 去利用 Cyper 查找你的數據)。它不僅僅是一種杰出的方式用一個簡單而直觀的方式來存儲你的數據,而且提供了很多高度聯系的數據查詢效率的好處(相信我你的數據是高度聯系的,盡管你沒有意識到)。我鼓勵你去看看 Neo4j 并在你的下一個項目中試試。

責任編輯:王雪燕 來源: oschina
相關推薦

2020-09-18 07:01:38

分頁offsetlimit

2013-09-30 09:49:06

存儲網絡FCoE存儲

2018-02-06 08:49:07

LinuxUnix命名管道

2023-04-04 08:10:40

CSS字體元素

2025-07-18 08:15:55

2022-11-18 17:53:03

Neo4j

2021-04-16 09:31:07

Rosetta 2安全軟件攻擊

2021-01-08 10:48:48

碼農編程編碼測試

2017-07-28 15:12:28

Neo4j圖數據庫

2021-12-27 07:31:37

JavaNeo4J數據庫

2018-10-07 23:00:37

2015-07-06 10:44:31

Node.js開發

2020-06-30 11:57:04

云端數據處理存儲

2022-04-13 11:32:45

Neo4j圖數據庫

2013-07-15 10:32:32

Windows虛擬機紅帽

2024-08-08 08:31:32

SpringNeo4j優化

2020-04-09 09:10:23

Python編程語言開發

2021-11-15 05:49:01

CIO管理層建立關系

2021-12-03 20:33:08

計算

2018-05-16 08:26:39

知識圖譜Neo4j
點贊
收藏

51CTO技術棧公眾號

怡红院av亚洲一区二区三区h| 免费一级片91| 成人av资源在线| 亚洲欧美一区二区精品久久久| 国产精品video| 亚洲麻豆一区二区三区| 欧美r级在线| 欧美绝顶高潮抽搐喷水合集| 自拍偷拍国产亚洲| 国产精品老牛影院在线观看| a级大片在线观看| cao在线视频| 国产精品99久久久| 日韩天堂在线视频| 香蕉视频禁止18| 国产视频网址在线| 亚洲综合社区| 亚洲国产日韩欧美综合久久 | 做爰无遮挡三级| 久久国产精品色av免费看| 亚洲精品中文字幕乱码三区| 91免费视频国产| 婷婷社区五月天| 日韩美女在线| ●精品国产综合乱码久久久久| 国产乱码精品一区二区三区不卡| 欧美人妻精品一区二区免费看| 国色天香久久精品国产一区| 亚洲精品美国一| 91av免费看| 久草视频在线资源站| 日韩伦理一区| 制服丝袜亚洲精品中文字幕| 亚洲 欧洲 日韩| 国产精品久久久久久免费播放| 久久免费大视频| 制服.丝袜.亚洲.另类.中文| av动漫免费看| 1769在线观看| 国内久久婷婷综合| 久久99国产综合精品女同| 精品无码av一区二区三区| 国产黄色大片在线观看| 99re6这里只有精品视频在线观看| 欧美又大又硬又粗bbbbb| 国产全是老熟女太爽了| 澳门成人av| 一本色道久久加勒比精品 | 亚洲小说图片| 色婷婷激情一区二区三区| 日韩五码在线观看| 国产在线视频福利| 久久99精品久久久久久动态图| 精品激情国产视频| 久久免费精品国产| 在线精品自拍| 在线亚洲一区观看| 国产午夜精品视频一区二区三区| 欧美一级一区二区三区| 丝袜亚洲另类欧美| 久久精品中文字幕一区| 日韩欧美在线视频播放| 风间由美一区二区av101| 一本久久精品一区二区| 亚洲国产精品久久久久婷蜜芽| 1024国产在线| 日韩美女啊v在线免费观看| 在线综合视频网站| 青青草在线播放| 国产在线视频一区二区三区| 欧美中文字幕视频| 成人免费视频网站入口::| 亚洲精品进入| 亚洲图中文字幕| 毛茸茸free性熟hd| 全国精品免费看| 国产一区二区三区久久精品| wwwww黄色| 日韩啪啪网站| 日韩欧美色综合| 亚洲成人天堂网| 夜鲁夜鲁夜鲁视频在线播放| 亚洲精品久久久久久国产精华液| 四虎4hu永久免费入口| 欧美日韩国产亚洲沙发| 国产成人在线看| 极品日韩久久| 国产av一区二区三区精品| 日韩成人一级大片| 欧美在线视频观看| 日批视频免费观看| 国产精品综合二区| 成人www视频在线观看| 中文在线第一页| 影音先锋日韩资源| 欧美成人免费在线视频| 亚洲天堂精品一区| 免费短视频成人日韩| 亚洲国产毛片完整版| 亚洲а∨天堂久久精品2021| 日韩超碰人人爽人人做人人添| 亚洲精品一二区| 美女又爽又黄视频毛茸茸| 深夜福利一区| 日韩欧美精品在线视频| 中文字幕av网址| 欧美黑人巨大videos精品| 国产香蕉一区二区三区在线视频 | 亚洲美女偷拍久久| 91猫先生在线| 国产午夜精品一区在线观看| 欧美日韩中字一区| 欧美午夜aaaaaa免费视频| 精品国产乱码久久久久久樱花| 国产丝袜一区二区三区免费视频| 九九精品视频免费| 中文字幕免费一区二区| 久久久国产精品视频| 国产黄色片免费看| 亚洲一区国产一区| 91精品国产高清久久久久久久久 | 成人福利在线观看视频| 国产精品国产三级国产a| 色综合视频二区偷拍在线 | 久久天天躁狠狠躁夜夜躁| 久久久久麻豆v国产| 国产一区二区三区的电影| 97人人干人人| 免费高清完整在线观看| 日本电影亚洲天堂一区| 三级在线视频观看| 日本一区二区三区中文字幕| 精品亚洲一区二区三区在线播放| 精品少妇theporn| 国产亚洲精品自拍| 51国偷自产一区二区三区| 91网在线播放| 在线一区二区观看| 一区二区三区伦理片| 日韩电影免费网址| 国产极品jizzhd欧美| 一起草av在线| 国产69精品久久久久777| 国产美女在线精品免费观看| 免费在线黄色电影| 欧美日在线观看| jizz大全欧美jizzcom| 久久av免费| 国产z一区二区三区| 日本人妖在线| 精品欧美一区二区三区| 手机看片福利日韩| 九九精品在线| 国产999在线观看| 国产免费的av| a级精品国产片在线观看| 视频一区亚洲| 91久久久久久白丝白浆欲热蜜臀| 日韩欧美第一区| 69av.com| 免费在线欧美视频| 丝袜足脚交91精品| 日韩黄色三级| 九九热r在线视频精品| 韩国av在线免费观看| 亚洲国产岛国毛片在线| 久久人人爽人人爽人人av| 主播大秀视频在线观看一区二区| 欧美一区中文字幕| 三级网站在线免费观看| 狂野欧美一区| 亚洲精品在线视频观看| 久色国产在线| 欧美丰满一区二区免费视频| 国产艳俗歌舞表演hd| 亚洲欧美日韩精品一区二区| 欧美一级日本a级v片| 蜜臀av在线| 国产丝袜高跟一区| 亚洲一区在线观| www国产亚洲精品久久麻豆| 成年人视频大全| 99a精品视频在线观看| 91精品国产91久久久久久不卡| 国产区av在线| 日韩欧美国产小视频| 亚洲另类在线观看| 亚洲欧洲一区二区在线播放| 亚洲av无码一区东京热久久| 男人的天堂亚洲| 精品欧美日韩在线| 91九色综合| 午夜精品久久久久久久男人的天堂| 国产精品无码久久av| 亚洲不卡一区二区三区| 欧美高清精品一区二区| 香蕉精品视频在线观看| 国产精品一区二区久久精品 | 国产亚洲精品美女久久久久| 国产又黄又粗又硬| 午夜影视日本亚洲欧洲精品| 中文字幕第二区| 成人a区在线观看| 五月婷婷六月合| 国产又黄又粗视频| 狠狠综合久久av一区二区蜜桃| 久热爱精品视频线路一| 高h震动喷水双性1v1| 国产精品视频123| 亚洲av无码乱码国产麻豆| 99精品在线免费| 色悠悠久久综合网| 亚洲高清成人| 最近中文字幕免费mv| 一道在线中文一区二区三区| 粉嫩av免费一区二区三区| 黄色网页在线观看| 欧美精品1区2区3区| 在线观看亚洲欧美| 亚洲精品国产a久久久久久| 天天干天天舔天天操| 99精品国产91久久久久久| 欧美日韩精品区别| 亚洲欧美伊人| 99国产超薄丝袜足j在线观看 | 国产成人亚洲综合色影视| 十八禁视频网站在线观看| 欧美交a欧美精品喷水| 亚洲伊人第一页| av成人 com a| 欧美乱妇高清无乱码| 午夜激情在线观看| 91精品国产综合久久福利| 中文字幕免费高清网站| 中文字幕一区三区| 秋霞网一区二区三区| 26uuu久久综合| 黄色在线观看av| 99国产精品一区| 艳妇乳肉豪妇荡乳xxx| 亚洲一区日韩| 男人日女人逼逼| 国产精品外国| 成年人观看网站| 噜噜噜久久亚洲精品国产品小说| 九色在线视频观看| 国产日韩1区| 无码aⅴ精品一区二区三区浪潮| 99热这里只有成人精品国产| 四虎永久国产精品| 国产成人精品一区二区免费看京| 蜜桃传媒一区二区| 亚洲久草在线| 91精品国产乱码久久久久久久久| 日韩av官网| 亚洲日本欧美中文幕| 国产激情久久久久久熟女老人av| 欧美精品在欧美一区二区少妇| 夜夜爽8888| 日韩视频一区二区三区| 在线永久看片免费的视频| 成人欧美一区二区三区| 久久精品在线观看视频| 亚洲欧美另类图片小说| 性猛交娇小69hd| 最近中文字幕一区二区三区| 91视频综合网| 五月婷婷综合在线| 久久亚洲精品石原莉奈| 欧美日韩午夜精品| 国产色视频在线| 日韩电影网在线| 亚洲高清视频在线播放| 亚洲第一天堂av| 国产精品久久777777换脸| 日韩精品在线一区| 五月天婷婷社区| 日韩女优视频免费观看| 日韩在线观看视频一区| 亚洲欧美在线播放| 免费a在线看| 午夜精品久久久久久久久久久久| 日韩不卡在线| 97中文在线| 亚洲区小说区图片区qvod按摩| 亚洲v欧美v另类v综合v日韩v| 不卡一区2区| 任我爽在线视频精品一| 99免费精品| 亚洲欧洲精品在线 | 波多野结衣av无码| 欧美丰满少妇xxxxx高潮对白| 好吊视频一区二区三区| 国产一区二区三区在线| 欧洲一区二区三区| 国产精品激情自拍| 99re6热只有精品免费观看| 日韩精品大片| 免费观看不卡av| 色哟哟免费网站| 视频一区在线播放| 日本少妇一区二区三区| 国产一区二区三区高清播放| 中文字幕在线永久| 亚洲色图.com| 人妻人人澡人人添人人爽| 天天做天天摸天天爽国产一区| 国产 日韩 欧美 成人| 亚洲黄色性网站| 懂色av蜜臀av粉嫩av分享吧最新章节| 日韩一级完整毛片| av电影在线播放高清免费观看| 久久久久免费视频| av网站在线免费观看| 久久久久久久999| 亚州欧美在线| 日本在线观看一区二区| 在线日本成人| 韩国三级丰满少妇高潮| 国产精品美女一区二区在线观看| 一级免费黄色录像| 色婷婷综合久久久久中文一区二区| 国产后入清纯学生妹| 中文字幕精品av| 免费的黄网站在线观看| 国产精品99蜜臀久久不卡二区| 日本午夜精品| 久久久久久人妻一区二区三区| 国产一区二区精品久久91| www中文在线| 欧美色网站导航| 黄色软件在线| 日本一区二区在线播放| 麻豆一区一区三区四区| 欧美一二三不卡| 国产精品一品视频| 手机在线免费看片| 欧美精选一区二区| 免费av在线网址| 国产日韩欧美在线播放| 一区二区三区在线资源| 美国av在线播放| 国产乱人伦偷精品视频免下载| 黑人狂躁日本娇小| 欧美日韩aaa| 手机在线观看免费av| 精品丝袜一区二区三区| 国产在线天堂www网在线观看| 国产成人啪精品视频免费网| 欧美一区二区三区红桃小说| 精品国产一二三四区| av网站免费线看精品| av图片在线观看| 夜夜躁日日躁狠狠久久88av| 秋霞在线视频| 国产一区二区三区四区五区在线| 在线看片欧美| 日韩网站在线播放| 欧洲亚洲国产日韩| 黄色的网站在线观看| 99re6热在线精品视频播放速度| 欧美日韩国产探花| 亚洲欧美另类动漫| 中日韩av电影| 国产喷水福利在线视频| 欧美大片免费看| 香蕉久久一区| 久久久久久久久影视| 成年人午夜久久久| 天干夜夜爽爽日日日日| 在线免费看av不卡| 久久精品九色| 久久综合九色综合88i| 国产午夜精品在线观看| 欧美福利视频一区二区| 日韩欧美国产一二三区| 华人av在线| 日韩欧美国产二区| 国产一区二区久久| 国产精品人人人人| 日韩中文字幕国产| 国产精品zjzjzj在线观看| 激情婷婷综合网| 亚洲欧美国产77777| 青青青草网站免费视频在线观看| 国产日韩欧美夫妻视频在线观看 | 欧美一级黄色影院| 99久久久免费精品国产一区二区| 潘金莲一级淫片aaaaaa播放| 日韩在线不卡视频| 美女一区二区在线观看| 蜜臀一区二区三区精品免费视频| 国产亚洲欧美色| 99久久久久久久| 日本不卡高字幕在线2019| 久久久9色精品国产一区二区三区| 日韩综合第一页| 欧美日韩国产在线播放网站| 91九色porn在线资源| 国产又大又长又粗又黄|