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

RAG實戰(zhàn) | 向量數(shù)據(jù)庫LanceDB指南

人工智能 數(shù)據(jù)庫
LanceDB是一個開源的用 Rust 實現(xiàn)的向量數(shù)據(jù)庫。向量搜索是一種在高維空間中搜索向量的方法,主要是將原始數(shù)據(jù)通過嵌入模型得到向量,然后通過向量相似度算法計算向量之間的距離,從而找到最相似的向量。

1. LanceDB介紹

LanceDB是一個開源的用 Rust 實現(xiàn)的向量數(shù)據(jù)庫(https://github.com/lancedb/lancedb),它的主要特點是:

  • 提供單機服務(wù),可以直接嵌入到應(yīng)用程序中
  • 支持多種向量索引算法,包括Flat、HNSW、IVF等。
  • 支持全文檢索,包括BM25、TF-IDF等。
  • 支持多種向量相似度算法,包括Cosine、L2等。
  • 與Arrow生態(tài)系統(tǒng)緊密集成,允許通過 SIMD 和 GPU 加速在共享內(nèi)存中實現(xiàn)真正的零拷貝訪問。

2. LanceDB安裝

pip install lancedb

預(yù)覽版本:

pip install --pre --extra-index-url https://pypi.fury.io/lancedb/ lancedb

3. 快速入門

3.1 連接或者打開數(shù)據(jù)庫

創(chuàng)建數(shù)據(jù)庫

import lancedb
db = lancedb.connect("./test")  # 如果數(shù)據(jù)庫不存在,會自動創(chuàng)建

打開數(shù)據(jù)庫

db = lancedb.open("./test")     # 如果數(shù)據(jù)庫不存在,會報錯

3.2 創(chuàng)建表

data = [
    {"vector": [1, 2], "text": "hello"},
    {"vector": [3, 4], "text": "world"},
]
table = db.create_table("my_table", data=data, mode="overwrite")

df = pd.DataFrame(data)
table = db.create_table("my_table", data=df, mode="overwrite")

3.3 查看當(dāng)前 db 中的表

print(db.table_names())

3.4 插入數(shù)據(jù)

data = [
    {"vector": [1, 2], "text": "hello"},
    {"vector": [3, 4], "text": "world"},
]
table.add(data)

3.5 查詢數(shù)據(jù)

通過向量查詢數(shù)據(jù)

query = [1, 2]
results = table.search(query).limit(1).to_pandas()

通過文本查詢數(shù)據(jù)

query = "hello"
results = table.search(query).limit(1).to_pandas()

3.6 創(chuàng)建索引

table.create_index()

LanceDB 不會自動創(chuàng)建索引,對于數(shù)據(jù)量較大的情況下,建議手動創(chuàng)建,否則會走全文檢索(速度會比較慢)。

3.7 刪除數(shù)據(jù)

table.delete(f'text = "hello"')

刪除數(shù)據(jù)當(dāng)然也支持 SQL 語法,具體參考官方文檔(https://lancedb.github.io/lancedb/sql/#pre-and-post-filtering)。

3.8 刪除表

db.drop_table("my_table")

注意:如果表不存在,會報錯,可以通過傳入?yún)?shù)忽略錯誤 ignore_missing=True

4. 向量搜索

4.1 什么是向量搜索

向量搜索是一種在高維空間中搜索向量的方法,主要是將原始數(shù)據(jù)通過嵌入模型得到向量,然后通過向量相似度算法計算向量之間的距離,從而找到最相似的向量。

圖片

4.2 embedding

embedding 是將原始數(shù)據(jù)通過嵌入模型得到向量的過程,嵌入模型可以是預(yù)訓(xùn)練的模型,也可以是自己訓(xùn)練的模型,是一種將文本、圖像、音頻等數(shù)據(jù)投影到二維空間的方法。

圖片

4.3 索引

和關(guān)系型數(shù)據(jù)庫一樣,向量數(shù)據(jù)庫也需要索引來加速查詢,索引是一種數(shù)據(jù)結(jié)構(gòu),用于快速查找數(shù)據(jù),LanceDB 使用基于磁盤的索引:IVF-PQ,是倒排索引的一種變體,使用PQ 來做壓縮嵌入。

圖片

PQ 原理主要分為以下步驟:

  • 對向量進行分桶,將向量分為多個桶,每個桶包含多個向量,比如 樣本的維度 D=1024,桶的數(shù)量 M=64,每個桶的維度 16;
  • 對樣本的每個段分別進行聚類,聚成 k=256(其中 K 可以定義) 個聚類中心,這樣整個樣本被分為 M*K 個聚類中心,每個聚類中心分配一個 ID(范圍 0-K-1);
  • 通過上面的聚類和 ID 分配,每個樣本就會變成量化后的向量,例如 [28, 100, 99, 255 ...];
  • 對于新加入樣本按照第一步的分桶方式切分,然后再聚類的分段里面找到最近的類中心,然后將聚類中心的 ID 作為量化后的向量;

通過以上的處理,原來 1024 維度向量*float類型(1024 * 4 字節(jié))被壓縮到 64 個字節(jié),大大減少了存儲空間和計算量,當(dāng)然量化是有損的,所以對于數(shù)據(jù)量不大的情況,可以不使用索引,直接暴力搜索。

4.4 暴力搜索和 ANN 搜索

  • 如果要搜索的準確度,執(zhí)行暴力搜索是一種好的選擇,基本上就是對所有的向量進行相似度計算,然后返回最相似的向量,相當(dāng)于 kNN 搜索。
  • kNN 和每個向量都做距離計算,計算量比較大,所以需要使用 ANN 搜索,ANN 搜索是一種基于樹的搜索方法,使用樹結(jié)構(gòu)來存儲向量,然后通過樹的搜索來找到最相似的向量。


圖片

4.5 HNSW

HNSW 是一種基于圖的搜索方法,使用圖結(jié)構(gòu)來存儲向量,然后通過圖的搜索來找到最相似的向量,原理類似跳躍表,通過分層的 k-ANN 圖來實現(xiàn)遞歸搜索。

圖片

LanceDB 創(chuàng)建 HNSW 索引樣例:

data = [
    {"vector": row, "item": f"item {i}"}
    for i, row in enumerate(np.random.random((10_000, 1536)).astype('float32'))
]
tbl = db.create_table("my_vectors", data=data)
tbl.create_index(index_type=IVF_HNSW_SQ)

5. LanceDB 使用指南

5.1 通過 Pandas DataFrame 插入數(shù)據(jù)

import pandas as pd
import lancedb
import numpy as np
db = lancedb.connect("./test")
table = db.create_table("my_table", data=[], mode="overwrite")
df = pd.DataFrame({
    "vector": [np.random.rand(100) for _ in range(100)],
    "text": [f"hello {i}" for i in range(100)],
})
table.add(df)

5.2 通過 Arrow Table 插入數(shù)據(jù)

import pyarrow as pa
import lancedb
import numpy as np
db = lancedb.connect("./test")
table = db.create_table("my_table", data=[], mode="overwrite")
table = db.create_table("my_table", data=pa.Table.from_pandas(df), mode="overwrite")

5.3 通過 Model 插入數(shù)據(jù)

import lancedb
from lancedb.pydantic import LanceModel

class MyModel(LanceModel):
    vector: list[float]
    text: str

db = lancedb.connect("./test")
table = db.create_table("my_table", schema=MyModel, mode="overwrite")
model = MyModel(vector=[1, 2], text="hello")
table.add(model)

5.4 通過迭代器寫入大規(guī)模數(shù)據(jù)

import lancedb
import pyarrow as pa

def make_batches():
    for i in range(1000):
        yield pa.Table.from_pandas(pd.DataFrame({
            "vector": [np.random.rand(100) for _ in range(100)],
            "text": [f"hello {i}"for i in range(100)],
        }))

schema = pa.schema(
    [
        pa.field("vector", pa.list_(pa.float32(), 4)),
        pa.field("item", pa.utf8()),
    ]
)
db = lancedb.connect("./test")
table = db.create_table("my_table", make_batches(), schema=schema, mode="overwrite")

或者通過迭代器寫入數(shù)據(jù):

import lancedb
import pyarrow as pa
def make_batches():
    for i in range(1000):
        yield pa.Table.from_pandas(pd.DataFrame({
            "vector": [np.random.rand(100) for _ in range(100)],
            "text": [f"hello {i}" for i in range(100)],
        }))

db = lancedb.connect("./test")
table = db.create_table("my_table", data=[], mode="overwrite")
table.add(make_batches())

5.5 刪除指定的數(shù)據(jù)

db = lancedb.connect("./test")
data = [
    {"x": 1, "vector": [1, 2]},
    {"x": 2, "vector": [3, 4]},
    {"x": 3, "vector": [5, 6]},
]
# Synchronous client
table = db.create_table("delete_row", data)
table.to_pandas()
#   x      vector
# 0  1  [1.0, 2.0]
# 1  2  [3.0, 4.0]
# 2  3  [5.0, 6.0]

table.delete("x = 2")
table.to_pandas()
#   x      vector
# 0  1  [1.0, 2.0]
# 1  3  [5.0, 6.0]

5.6 更新數(shù)據(jù)

db = lancedb.connect("./test")
data = [
    {"x": 1, "vector": [1, 2]},
    {"x": 2, "vector": [3, 4]},
    {"x": 3, "vector": [5, 6]}, 
]
# Synchronous client    
table = db.create_table("update_row", data)
table.update(where="x = 2", values={"vector": [10, 10]})

5.7 一致性

由于 lancedb 是嵌入到各個應(yīng)用中,所以數(shù)據(jù)更新并不能保持一致,可以通過設(shè)置 read_consistency_interval 參數(shù)來保證數(shù)據(jù)更新的一致性。

read_consistency_interval 是一個時間間隔,單位是秒。

  • 不設(shè)置,數(shù)據(jù)庫不檢查其他進程對表所做的更新。這提供了最佳查詢性能,但意味著客戶端可能無法看到最新的數(shù)據(jù),此設(shè)置適用于在表引用的生命周期內(nèi)數(shù)據(jù)不會發(fā)生變化的應(yīng)用程序。
  • 如果設(shè)置為 0,數(shù)據(jù)庫在每次讀取時檢查更新。這提供了最強的一致性保證,確保所有客戶端都看到最新提交的數(shù)據(jù),但是,它的開銷最大。當(dāng)一致性比高 QPS 更重要時,此設(shè)置是合適的。
  • 自定義間隔時間,數(shù)據(jù)庫以自定義間隔(例如每 5 秒)檢查更新。這提供了最終一致性,允許寫入和讀取操作之間有一些滯后,從性能方面來看,這是強一致性和無一致性檢查之間的中間地帶,此設(shè)置適用于即時一致性并不重要但客戶端最終應(yīng)該看到更新數(shù)據(jù)的應(yīng)用程序。
from datetime import timedelta

uri = "data/sample-lancedb"
# 保障數(shù)據(jù)最終一致性
db = lancedb.connect(uri, read_consistency_interval=timedelta(secnotallow=5))
tbl = db.open_table("test_table")

5.8 構(gòu)建 ANN 索引

import lancedb
import numpy as np
db = lancedb.connect("./test")
data = [
    {"vector": row, "item": f"item {i}"}
    for i, row in enumerate(np.random.random((10_000, 1536)).astype('float32'))
]
tbl = db.create_table("my_vectors", data=data)
tbl.create_index(distance_type='l2', num_partitinotallow=2, num_sub_vectors=4)
  • distance_type:距離度量算法,可以參考(cosine, l2)等;
  • num_partitions: 分區(qū)數(shù)量;
  • num_sub_vectors:子向量數(shù)量,PQ 的子向量數(shù)量;
  • num_bits:用于編碼的子向量的位數(shù),支持 4 和 8;

如果需要通過 CUDA 加速,可以增加參數(shù):

tbl.create_index(distance_type='l2', num_partitinotallow=2, num_sub_vectors=4, accelerator='cuda')

5.9 搜索數(shù)據(jù)

1)kNN 搜索:不建立索引,就會掃描全表,計算每個向量的距離,然后返回最相似的 k 個向量,也可以指定距離度量算法。

query = np.random.random(1536).astype('float32')
results = tbl.search(query).limit(10).distance_type("cosine").to_pandas()

2)ANN 搜索:通過索引搜索,支持 nprobes 和 refine_factor 參數(shù)。

  • nprobes 數(shù)字越大,搜索越準確,但是速度越慢;
  • refine_factor 對召回的進行重排優(yōu)化;
query = np.random.random(1536).astype('float32')
tbl.search(query).limit(2).nprobes(20).refine_factor(
    10
).to_pandas()

3)基于距離范圍搜索:主要用于不通過topk 查詢,而是通過距離范圍查詢。

query = np.random.random(1536).astype('float32')
tbl.search(query).distance_range(0.1, 0.5).to_pandas()

4)全文搜索:如果需要對字符串進行索引,并通過關(guān)鍵字搜索進行查詢,可以通過創(chuàng)建 FTS 索引。

from lancedb.index import FTS

tbl = db.create_table("my_vectors", data=[
    {"vector": np.rand.random(10), "item": f"this item {i}"}
    {"vector": np.rand.random(10), "item": f"this item {i + 100}"}
])
tbl.create_fts_index("text", use_tantivy=False)
tbl.search("this item 10").limit(10).select(["item"]).to_pandas()

5)過濾搜索:通過 SQL 語法進行過濾搜索。

tbl.search("this item 10").limit(10).where("item='this'", prefilter=True).to_pandas()

5.10 SQL 語法

LanceDB 支持 SQL 語法如下:

>, <, >=, <=
AND, OR, NOT
IS NULL, IS NOT NULL
IS TRUE, IS FALSE
IN 
LIKE, NOT LIKE
CAST 
regexp_match(column, pattern)

樣例如下:

table.search("this item 10").where(
    "(item IN ('item 0', 'item 2')) AND (id > 10)"
).to_arrow()

6. LanceDB 結(jié)合 embedding

6.1 注冊 embedding 模型

LanceDB 支持結(jié)合 embedding 模型進行搜索。

import lancedb
from lancedb.pydantic import LanceModel, Vector
from lancedb.embeddings import get_registry

db = lancedb.connect("./test")
func = get_registry().get("openai").create(name="text-embedding-ada-002")

class Words(LanceModel):
    text: str = func.SourceField()
    vector: Vector(func.ndims()) = func.VectorField()

table = db.create_table("words", schema=Words, mode="overwrite")
table.add(
    [
        {"text": "hello world"},
        {"text": "goodbye world"}
    ]
)

query = "greetings"
actual = table.search(query).limit(1).to_pydantic(Words)[0]
print(actual.text)

通過 get_registry() 注冊不同的模型參數(shù),其中支持的代碼如下:

  • get_registry().get("sentence-transformers").create(name="BAAI/bge-small-en-v1.5", device="cpu")
  • get_registry().get("huggingface").create(name='facebook/bart-base')
  • get_registry().get("ollama").create(name="nomic-embed-text")
  • get_registry().get("openai").create(name="text-embedding-ada-002")
  • et_registry().get("instructor").create(source_instructinotallow="represent the docuement for retreival", query_instructinotallow="represent the document for retreiving the most similar documents")
  • get_registry().get("gemini-text").create()
  • get_registry().get("open-clip").create()
  • get_registry().get("imagebind").create()...

6.2 完整的使用樣例

1)注冊 embedding 函數(shù)

from lancedb.embeddings import get_registry

registry = get_registry()
clip = registry.get("open-clip").create()

2)定義數(shù)據(jù)模型

from lancedb.pydantic import LanceModel, Vector
from typing import List

class Document(LanceModel):
    id: str
    vector: Vector(clip.ndims()) = clip.VectorField()
    image_uri: str = clip.SourceField()

3)創(chuàng)建表并添加數(shù)據(jù)

db = lancedb.connect("~/lancedb")
table = db.create_table("pets", schema=Pets)

table.add([{"image_uri": u} for u in uris])

4)查詢數(shù)據(jù)

results = (
    table.search("dog")
        .limit(10)
        .to_pandas()
)

參考

(1)https://lancedb.github.io/lancedb/

(2)https://excalidraw-phi-woad.vercel.app/

責(zé)任編輯:龐桂玉 來源: 周末程序猿
相關(guān)推薦

2025-05-15 09:43:15

知識圖譜向量數(shù)據(jù)庫RAG

2025-04-01 07:30:00

2023-11-27 00:58:00

數(shù)據(jù)庫AI

2025-07-29 09:04:41

2025-06-06 08:39:15

2025-05-26 02:44:00

向量數(shù)據(jù)庫傳統(tǒng)數(shù)據(jù)庫向量化

2023-07-20 20:54:09

2024-05-22 12:07:12

向量數(shù)據(jù)庫AI

2023-07-28 08:00:00

人工智能向量數(shù)據(jù)庫

2024-04-29 09:16:33

2011-03-04 10:30:25

ASP數(shù)據(jù)庫

2024-10-11 14:55:25

RAG企業(yè)數(shù)據(jù)GenAI

2023-01-05 08:00:00

2010-08-10 15:02:18

Oracle認證數(shù)據(jù)庫

2025-05-20 08:50:00

2023-10-09 14:51:53

向量數(shù)據(jù)庫

2022-12-05 08:00:00

數(shù)據(jù)庫向量化數(shù)據(jù)庫性能

2025-07-31 00:00:25

點贊
收藏

51CTO技術(shù)棧公眾號

国产精品一二三区在线| 日韩精品久久| 欧美小视频在线| 日韩av高清| 国产女人高潮的av毛片| 亚洲一区激情| xvideos亚洲人网站| 日本少妇激三级做爰在线| av电影在线免费| 欧美极品另类videosde| 成人三级在线| 在线观看亚洲国产| 亚洲裸体俱乐部裸体舞表演av| 亚洲视频第一页| 亚洲精品成人无码毛片| 四虎4545www国产精品| 亚洲国产综合在线| 亚洲午夜精品久久久久久浪潮| 亚洲经典一区二区三区| 日本不卡123| 97视频免费在线观看| 三上悠亚在线观看视频| 婷婷五月色综合香五月| 欧美一级理论片| 在线观看免费成人av| gogo高清在线播放免费| 亚洲欧美aⅴ...| 日韩久久不卡| 色中色在线视频| 丁香桃色午夜亚洲一区二区三区| 国产精品成熟老女人| 久久久久久久99| 欧美成人有码| zzjj国产精品一区二区| 我和岳m愉情xxxⅹ视频| a级日韩大片| 91精品国产综合久久久蜜臀粉嫩 | 久久一区二区三区四区五区| 精品少妇一区二区30p| 久久久久人妻一区精品色| 蜜臀av免费一区二区三区| 亚洲国产欧美一区二区丝袜黑人| 香蕉视频xxx| 国产精品1区在线| 欧美日韩情趣电影| 久久久久久久久久久99| 国产九色在线| 久久精品一区蜜桃臀影院| 久久国产一区二区| 日韩国产福利| 波多野结衣中文字幕一区| 91精品在线观| 97在线视频人妻无码| 裸体一区二区三区| 国产综合色香蕉精品| 91免费视频播放| 国精产品一区一区三区mba桃花| 国产精品永久免费观看| 91久久精品国产91性色69| 久久se精品一区精品二区| 国产精品自产拍在线观看| 艳妇乳肉豪妇荡乳av| 久久精品av麻豆的观看方式| 91久久精品视频| 性一交一乱一透一a级| 国产91精品露脸国语对白| 国产伦精品一区二区| 天天操天天操天天| 久久久久综合网| 天堂一区二区三区| 黄色av免费在线| 一个色在线综合| av在线播放亚洲| 激情开心成人网| 亚洲欧美另类综合偷拍| 潘金莲一级淫片aaaaa免费看| 色呦呦呦在线观看| 欧美日韩国产黄| 欧美伦理视频在线观看| 色综合一区二区日本韩国亚洲| 欧美一区二区三级| 国产乱了高清露脸对白| 色97色成人| 国产69精品久久久| 欧美日韩一级黄色片| 精品亚洲国产成人av制服丝袜 | 999这里有精品| 日韩免费精品| 国产亚洲视频在线观看| 无码黑人精品一区二区| 亚洲免费观看| 成人精品在线观看| 青青色在线视频| 亚洲日本护士毛茸茸| 国产精品裸体瑜伽视频| 欧美黑粗硬大| 日韩av在线免费播放| 九九九视频在线观看| 精品96久久久久久中文字幕无| 奇米4444一区二区三区| 国产又粗又猛又爽又黄91| 成人av在线一区二区三区| 日韩影视精品| 182在线播放| 欧美精品一二三四| 国产福利短视频| 99热国内精品| 日韩免费av在线| 成人久久精品人妻一区二区三区| 国产欧美一区视频| 97在线国产视频| 日本a人精品| 亚洲欧美制服另类日韩| 久久久精品视频在线| 美女视频黄 久久| 久久精品中文字幕一区二区三区 | 99免费精品| 国产成人黄色av| 午夜视频www| 亚洲在线一区二区三区| 亚洲天堂网2018| 精品国产日韩欧美| 91国自产精品中文字幕亚洲| 午夜久久久久久久久久| 中文字幕一区二区在线播放| 无遮挡又爽又刺激的视频| 国内精品国产成人国产三级粉色| 久久精品中文字幕一区| 中文字幕网址在线| 久久久久久久网| 岳毛多又紧做起爽| 美女福利一区| 国模吧一区二区| 成人免费视频国产| 依依成人综合视频| 伊人成人免费视频| 68国产成人综合久久精品| 国产女同一区二区| 香蕉视频在线播放| 欧美色电影在线| 国产精品无码在线| 黄色成人91| 国产精品久久久一区二区三区| 在线网址91| 日韩女优制服丝袜电影| 午夜少妇久久久久久久久| 国产一区免费电影| 50度灰在线观看| 亚洲高清在线一区| 欧美华人在线视频| 成人小说亚洲一区二区三区| 亚洲一区二区三区在线看| 好吊操视频这里只有精品| 欧美午夜a级限制福利片| 91丝袜脚交足在线播放| 欧美卡一卡二| 亚洲国产高清高潮精品美女| 91视频免费网址| 久久亚洲二区三区| 一区二区三区韩国| 一区二区中文字| 成人欧美一区二区三区视频xxx| 成人在线免费观看黄色| 亚洲黄色av网站| 日日夜夜操视频| 国产精品久久久久aaaa| 日韩欧美中文视频| 一本久道久久综合狠狠爱| 欧美一进一出视频| 亚洲影视资源| 高清欧美性猛交xxxx| 日本午夜在线视频| 欧美日韩一卡二卡三卡| www.色小姐com| 91日韩在线专区| 亚欧激情乱码久久久久久久久| 亚洲欧洲中文字幕| 国产在线精品一区二区三区| 欧美日韩大片| 日韩一区二区欧美| 日韩一级片免费看| 日本道色综合久久| 秋霞欧美一区二区三区视频免费| 国产精品自拍av| 凹凸国产熟女精品视频| 国产大片一区| 精品视频一区二区| 国产极品嫩模在线观看91精品| 美女性感视频久久久| 日韩精品123| 91精品在线免费| 日韩在线 中文字幕| 亚洲精品国产无套在线观| 丰满少妇一区二区三区| 激情综合网激情| 精品中文字幕av| 亚洲a在线视频| 欧美日本亚洲| 日韩亚洲精品在线观看| 国产精品高潮呻吟久久av野狼| 婷婷av在线| 最近的2019中文字幕免费一页| 色一情一乱一乱一区91av| 欧美日韩一区二区三区高清 | 欧美无砖专区一中文字| 国产精品日日夜夜| 中文字幕一区二区视频| 黄色a一级视频| 国产成人午夜精品影院观看视频| 成人一区二区三| 激情婷婷亚洲| 神马午夜伦理影院| 日韩美女一区二区三区在线观看| 精品欧美一区二区在线观看视频| 国产成人免费av一区二区午夜| 欧美在线视频免费| 色呦呦久久久| 欧美尺度大的性做爰视频| 在线免费观看的av网站| 亚洲全黄一级网站| 日本在线丨区| 亚洲国产精品电影| 风流老熟女一区二区三区| 7777精品伊人久久久大香线蕉的 | 精品123区| 青青精品视频播放| 黄色在线免费观看网站| 欧美激情aaaa| 最新av在线播放| 久久天天躁狠狠躁夜夜av| 北条麻妃在线| 国产亚洲成av人片在线观看桃| 深夜影院在线观看| 亚洲黄色av女优在线观看| 日韩中文字幕观看| 亚洲成人在线视频播放| 亚洲精品国产精品国| 日韩欧美在线综合网| 99热这里只有精品9| 在线不卡a资源高清| 一本色道久久综合熟妇| 欧美色图天堂网| 中文字幕免费观看视频| 在线观看免费视频综合| 午夜视频网站在线观看| 欧美性猛片aaaaaaa做受| 亚洲av综合一区| 欧美在线观看一区二区| 中文字幕精品一区二| 欧美色综合网站| 中文字字幕在线观看| 欧美三片在线视频观看| 亚洲一区二区色| 欧美一区二区三区成人| 狠狠躁夜夜躁av无码中文幕| 亚洲精品一区在线观看| 日漫免费在线观看网站| 亚洲午夜未删减在线观看 | 国产精品一级视频| 日韩亚洲欧美在线观看| 欧美 日韩 国产 精品| 亚洲激情电影中文字幕| 免费一级在线观看播放网址| 最近更新的2019中文字幕| 很黄的网站在线观看| 欧美美女15p| 鲁鲁在线中文| 欧美在线视频播放| 欧美黑粗硬大| 波多野结衣成人在线| 青青一区二区| 色涩成人影视在线播放| 91精品国产91久久久久久黑人| 99久久久精品视频| 久色成人在线| 日韩视频在线观看一区二区三区| 国产69精品久久99不卡| 国产激情在线免费观看| 亚洲人成网站精品片在线观看| 国产亚洲精品久久久久久打不开| 黑人巨大精品欧美一区免费视频| 国产情侣免费视频| 精品国产制服丝袜高跟| 欧美zozo| 九九热r在线视频精品| 韩国美女久久| 亚洲综合大片69999| 亚洲黄页网站| av磁力番号网| 久久精品麻豆| 精品人妻在线视频| 中文文精品字幕一区二区| 国产成人精品亚洲男人的天堂| 在线观看成人免费视频| 蜜臀久久久久久999| 最近2019年手机中文字幕| 91资源在线观看| 国产日产欧美精品| 同性恋视频一区| 日本在线视频www色| 老妇喷水一区二区三区| 精品伦一区二区三区| 国产精品色在线| 国产精品视频久久久久久久| 91精品婷婷国产综合久久 | 久久久免费毛片| 成人手机视频在线| 可以免费看不卡的av网站| 在线观看免费视频国产| 中文字幕在线观看一区二区| 亚洲熟女综合色一区二区三区| 欧美一区二区三区免费观看视频 | 99热这里只有精品在线播放| 成人免费视频一区| 国产老头老太做爰视频| 欧美午夜免费电影| 你懂的免费在线观看视频网站| 国产做受高潮69| 91久久精品无嫩草影院 | 毛片在线播放a| 国产成人精品免高潮在线观看| 九九热hot精品视频在线播放| 三年中国中文在线观看免费播放| 日韩国产在线观看一区| 亚洲成人日韩在线| 午夜精品福利视频网站| 精品人妻av一区二区三区| 日韩在线激情视频| 成人开心激情| 欧美日韩综合精品| 亚洲欧美久久久| 亚洲天堂成人av| 第一福利永久视频精品| 蜜臀久久久久久999| 久久人人看视频| 粉嫩的18在线观看极品精品| 成人小视频在线观看免费| 国产成人精品一区二 | 色婷婷综合久久久久中文| 香蕉av在线播放| 91成人在线观看国产| 欧美亚洲国产日韩| 国内性生活视频| 久久综合九色综合97婷婷| 黄色片中文字幕| 亚洲欧美日韩爽爽影院| 欧美××××黑人××性爽| 人禽交欧美网站免费| 日韩在线一二三区| 美女100%露胸无遮挡| 欧美日韩综合一区| 老司机在线看片网av| 亚洲影视九九影院在线观看| 伊人青青综合网| 精品无码av一区二区三区| 亚洲成年人影院| 日韩有码电影| 国产精自产拍久久久久久蜜| 小小影院久久| 久久久久国产免费| 欧美日韩免费看| jizz在线免费观看| 成人免费午夜电影| 激情av一区| 国产熟妇搡bbbb搡bbbb| 欧美天堂一区二区三区| 麻豆视频在线观看免费| 成人黄视频免费| 午夜在线视频观看日韩17c| 五月婷六月丁香| 91精品国产高清一区二区三区| sm在线播放| 日韩在线三级| 国产精品一区二区在线看| 日韩av在线播放观看| 一区二区三区四区在线观看视频| 国产精品美女久久久久人| 青草青青在线视频| 日本一区二区视频在线观看| 99视频在线观看免费| 欧美中文字幕在线视频| 99久久亚洲精品| 成人影视免费观看| 7777精品久久久大香线蕉| 18aaaa精品欧美大片h| 欧美日韩一区在线视频| 激情成人午夜视频| 黄色片中文字幕| 欧美精品xxx| 操欧美老女人| 亚洲综合自拍网| 日韩一区二区高清| 日日夜夜天天综合| 国内少妇毛片视频| 中文字幕精品综合| 天天综合网在线观看| 亚洲free性xxxx护士白浆| 日韩激情视频网站| 国产成人亚洲欧洲在线| 久久国产天堂福利天堂|