日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HarmonyOS之数据管理·分布式数据服务的应用

發(fā)布時間:2024/5/21 编程问答 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HarmonyOS之数据管理·分布式数据服务的应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、簡介

① 基本概念
  • 分布式數(shù)據(jù)服務(wù)(Distributed Data Service,DDS) 為應(yīng)用程序提供不同設(shè)備間數(shù)據(jù)庫數(shù)據(jù)分布式的能力。通過調(diào)用分布式數(shù)據(jù)接口,應(yīng)用程序?qū)?shù)據(jù)保存到分布式數(shù)據(jù)庫中。通過結(jié)合帳號、應(yīng)用和數(shù)據(jù)庫三元組,分布式數(shù)據(jù)服務(wù)對屬于不同的應(yīng)用的數(shù)據(jù)進(jìn)行隔離,保證不同應(yīng)用之間的數(shù)據(jù)不能通過分布式數(shù)據(jù)服務(wù)互相訪問。在通過可信認(rèn)證的設(shè)備間,分布式數(shù)據(jù)服務(wù)支持應(yīng)用數(shù)據(jù)相互同步,為用戶提供在多種終端設(shè)備上一致的數(shù)據(jù)訪問體驗(yàn)。
  • KV 數(shù)據(jù)模型:
    • “KV數(shù)據(jù)模型”是“Key-Value數(shù)據(jù)模型”的簡稱,“Key-Value”即“鍵-值”。它是一種 NoSQL 類型數(shù)據(jù)庫,其數(shù)據(jù)以鍵值對的形式進(jìn)行組織、索引和存儲。
    • KV 數(shù)據(jù)模型適合不涉及過多數(shù)據(jù)關(guān)系和業(yè)務(wù)關(guān)系的業(yè)務(wù)數(shù)據(jù)存儲,比 SQL 數(shù)據(jù)庫存儲擁有更好的讀寫性能,同時因在分布式場景中降低了數(shù)據(jù)庫版本兼容和數(shù)據(jù)同步過程中沖突解決的復(fù)雜度而被廣泛使用。分布式數(shù)據(jù)庫也是基于 KV 數(shù)據(jù)模型,對外提供 KV 類型的訪問接口。
  • 分布式數(shù)據(jù)庫事務(wù)性:分布式數(shù)據(jù)庫事務(wù)支持本地事務(wù)(和傳統(tǒng)數(shù)據(jù)庫的事務(wù)概念一致)和同步事務(wù),同步事務(wù)是指在設(shè)備之間同步數(shù)據(jù)時,是以本地事務(wù)為單位進(jìn)行同步,一次本地事務(wù)的修改要么都同步成功,要么都同步失敗。
  • 分布式數(shù)據(jù)庫一致性:在分布式場景中一般會涉及多個設(shè)備,組網(wǎng)內(nèi)設(shè)備之間看到的數(shù)據(jù)是否一致稱為分布式數(shù)據(jù)庫的一致性。分布式數(shù)據(jù)庫一致性可以分為強(qiáng)一致性、弱一致性和最終一致性。
    • 強(qiáng)一致性:是指某一設(shè)備成功增、刪、改數(shù)據(jù)后,組網(wǎng)內(nèi)設(shè)備對該數(shù)據(jù)的讀取操作都將得到更新后的值。
    • 弱一致性:是指某一設(shè)備成功增、刪、改數(shù)據(jù)后,組網(wǎng)內(nèi)設(shè)備可能能讀取到本次更新數(shù)據(jù),也可能讀取不到,不能保證在多長時間后每個設(shè)備的數(shù)據(jù)一定是一致的。
    • 最終一致性:是指某一設(shè)備成功增、刪、改數(shù)據(jù)后,組網(wǎng)內(nèi)設(shè)備可能讀取不到本次更新數(shù)據(jù),但在某個時間窗口之后組網(wǎng)內(nèi)設(shè)備的數(shù)據(jù)能夠達(dá)到一致狀態(tài)。
    • 強(qiáng)一致性對分布式數(shù)據(jù)的管理要求非常高,在服務(wù)器的分布式場景可能會遇到。因?yàn)橐苿咏K端設(shè)備的不常在線、以及無中心的特性,分布式數(shù)據(jù)服務(wù)不支持強(qiáng)一致,只支持最終一致性。
  • 分布式數(shù)據(jù)庫同步
    • 底層通信組件完成設(shè)備發(fā)現(xiàn)和認(rèn)證,會通知上層應(yīng)用程序(包括分布式數(shù)據(jù)服務(wù))設(shè)備上線。收到設(shè)備上線的消息后分布式數(shù)據(jù)服務(wù)可以在兩個設(shè)備之間建立加密的數(shù)據(jù)傳輸通道,利用該通道在兩個設(shè)備之間進(jìn)行數(shù)據(jù)同步。
    • 分布式數(shù)據(jù)服務(wù)提供了兩種同步模式:手動同步和自動同步模式。手動同步模式完全由應(yīng)用程序調(diào)用接口來觸發(fā),并且支持指定同步的設(shè)備列表和同步模式(PULL、 PUSH 和 PULL_PUSH 三種同步模式)。自動同步模式由分布式數(shù)據(jù)庫來完成數(shù)據(jù)同步(同步時機(jī)包括設(shè)備上線、應(yīng)用程序修改數(shù)據(jù)等),業(yè)務(wù)不感知同步操作。
  • 單版本分布式數(shù)據(jù)庫:單版本是指數(shù)據(jù)在本地保存是以單個 KV 條目為單位的方式保存,對每個 Key 最多只保存一個條目項,當(dāng)數(shù)據(jù)在本地被用戶修改時,不管它是否已經(jīng)被同步出去,均直接在這個條目上進(jìn)行修改。同步也以此為基礎(chǔ),按照它在本地被寫入或更改的順序?qū)?dāng)前最新一次修改逐條同步至遠(yuǎn)端設(shè)備。
  • 設(shè)備協(xié)同分布式數(shù)據(jù)庫:設(shè)備協(xié)同分布式數(shù)據(jù)庫建立在單版本分布式數(shù)據(jù)庫之上,對應(yīng)用程序存入的 KV 數(shù)據(jù)中的 Key 前面拼接了本設(shè)備的 DeviceID 標(biāo)識符,這樣能保證每個設(shè)備產(chǎn)生的數(shù)據(jù)嚴(yán)格隔離,底層按照設(shè)備的維度管理這些數(shù)據(jù),設(shè)備協(xié)同分布式數(shù)據(jù)庫支持以設(shè)備的維度查詢分布式數(shù)據(jù),但是不支持修改遠(yuǎn)端設(shè)備同步過來的數(shù)據(jù)。
  • 分布式數(shù)據(jù)庫沖突解決策略:分布式數(shù)據(jù)庫多設(shè)備提交沖突場景,在給提交沖突做合并的過程中,如果多個設(shè)備同時修改了同一數(shù)據(jù),則稱這種場景為數(shù)據(jù)沖突。數(shù)據(jù)沖突采用默認(rèn)沖突解決策略,基于提交時間戳,取時間戳較大的提交數(shù)據(jù),當(dāng)前不支持定制沖突解決策略。
  • 數(shù)據(jù)庫 Schema 化管理與謂詞查詢:單版本數(shù)據(jù)庫支持在創(chuàng)建和打開數(shù)據(jù)庫時指定Schema,數(shù)據(jù)庫根據(jù) Schema 定義感知 KV 記錄的 Value 格式,以實(shí)現(xiàn)對 Value 值結(jié)構(gòu)的檢查,并基于 Value 中的字段實(shí)現(xiàn)索引建立和支持謂詞查詢。
  • 分布式數(shù)據(jù)庫備份能力:提供分布式數(shù)據(jù)庫備份能力,業(yè)務(wù)通過設(shè)置 backup 屬性為 true,可以觸發(fā)分布式數(shù)據(jù)服務(wù)每日備份。當(dāng)分布式數(shù)據(jù)庫發(fā)生損壞,分布式數(shù)據(jù)服務(wù)會刪除損壞數(shù)據(jù)庫,并且從備份數(shù)據(jù)庫中恢復(fù)上次備份的數(shù)據(jù)。如果不存在備份數(shù)據(jù)庫,則創(chuàng)建一個新的數(shù)據(jù)庫。同時支持加密數(shù)據(jù)庫的備份能力。
② 運(yùn)作機(jī)制
  • 分布式數(shù)據(jù)服務(wù)支撐 HarmonyOS 系統(tǒng)上應(yīng)用程序數(shù)據(jù)庫數(shù)據(jù)分布式管理,支持?jǐn)?shù)據(jù)在相同帳號的多端設(shè)備之間相互同步,為用戶在多端設(shè)備上提供一致的用戶體驗(yàn),分布式數(shù)據(jù)服務(wù)包含五部分:
    • 服務(wù)接口:分布式數(shù)據(jù)服務(wù)提供專門的數(shù)據(jù)庫創(chuàng)建、數(shù)據(jù)訪問、數(shù)據(jù)訂閱等接口給應(yīng)用程序調(diào)用,接口支持 KV 數(shù)據(jù)模型,支持常用的數(shù)據(jù)類型,同時確保接口的兼容性、易用性和可發(fā)布性。
    • 服務(wù)組件:服務(wù)組件負(fù)責(zé)服務(wù)內(nèi)元數(shù)據(jù)管理、權(quán)限管理、加密管理、備份和恢復(fù)管理以及多用戶管理等、同時負(fù)責(zé)初始化底層分布式 DB 的存儲組件、同步組件和通信適配層。
    • 存儲組件:存儲組件負(fù)責(zé)數(shù)據(jù)的訪問、數(shù)據(jù)的縮減、事務(wù)、快照、數(shù)據(jù)庫加密,以及數(shù)據(jù)合并和沖突解決等特性。
    • 同步組件:同步組件連結(jié)了存儲組件與通信組件,其目標(biāo)是保持在線設(shè)備間的數(shù)據(jù)庫數(shù)據(jù)一致性,包括將本地產(chǎn)生的未同步數(shù)據(jù)同步給其他設(shè)備,接收來自其他設(shè)備發(fā)送過來的數(shù)據(jù),并合并到本地設(shè)備中。
    • 通信適配層:通信適配層負(fù)責(zé)調(diào)用底層公共通信層的接口完成通信管道的創(chuàng)建、連接,接收設(shè)備上下線消息,維護(hù)已連接和斷開設(shè)備列表的元數(shù)據(jù),同時將設(shè)備上下線信息發(fā)送給上層同步組件,同步組件維護(hù)連接的設(shè)備列表,同步數(shù)據(jù)時根據(jù)該列表,調(diào)用通信適配層的接口將數(shù)據(jù)封裝并發(fā)送給連接的設(shè)備。
  • 應(yīng)用程序通過調(diào)用分布式數(shù)據(jù)服務(wù)接口實(shí)現(xiàn)分布式數(shù)據(jù)庫創(chuàng)建、訪問、訂閱功能,服務(wù)接口通過操作服務(wù)組件提供的能力,將數(shù)據(jù)存儲至存儲組件,存儲組件調(diào)用同步組件實(shí)現(xiàn)將數(shù)據(jù)同步,同步組件使用通信適配層將數(shù)據(jù)同步至遠(yuǎn)端設(shè)備,遠(yuǎn)端設(shè)備通過同步組件接收數(shù)據(jù),并更新至本端存儲組件,通過服務(wù)接口提供給應(yīng)用程序使用。
  • 數(shù)據(jù)分布式運(yùn)作示意圖如下:

③ 使用限制
  • 應(yīng)用程序如需使用分布式數(shù)據(jù)服務(wù)完整功能,需要申請 ohos.permission.DISTRIBUTED_DATASYNC 權(quán)限。
  • 分布式數(shù)據(jù)服務(wù)的數(shù)據(jù)模型僅支持 KV 數(shù)據(jù)模型,不支持外鍵、觸發(fā)器等關(guān)系型數(shù)據(jù)庫中的技術(shù)點(diǎn)。
  • 分布式數(shù)據(jù)服務(wù)支持的 KV 數(shù)據(jù)模型規(guī)格:
    • 設(shè)備協(xié)同數(shù)據(jù)庫,Key 最大支持 896Byte,Value 最大支持 4MB - 1Byte。
    • 單版本數(shù)據(jù)庫,Key 最大支持 1KB,Value 最大支持 4MB - 1Byte。
    • 每個應(yīng)用程序最多支持同時打開 16 個 KvStore。
  • 由于支持的存儲類型不完全相同等原因,分布式數(shù)據(jù)服務(wù)無法完全代替業(yè)務(wù)沙箱內(nèi)數(shù)據(jù)庫數(shù)據(jù)的存儲功能,開發(fā)人員需要確定要做分布式同步的數(shù)據(jù),把這些數(shù)據(jù)保存到分布式數(shù)據(jù)服務(wù)中。
  • 分布式數(shù)據(jù)服務(wù)當(dāng)前不支持應(yīng)用程序自定義沖突解決策略。
  • 分布式數(shù)據(jù)服務(wù)當(dāng)前流控機(jī)制針對 KvStore 的接口 1 秒最大訪問 1000 次,1 分鐘最大訪問 10000 次。KvManager 的接口 1 秒最大訪問 50 次,1 分鐘最大訪問 500 次。
  • 如果需要在分布式數(shù)據(jù)庫事件回調(diào)的方法里修改 UI 組件,建議使用 UITaskDispatcher 機(jī)制。
④ 應(yīng)用場景
  • 分布式數(shù)據(jù)服務(wù)主要實(shí)現(xiàn)對用戶設(shè)備中應(yīng)用程序的數(shù)據(jù)內(nèi)容的分布式同步。
  • 當(dāng)設(shè)備 1 上的應(yīng)用 A 在分布式數(shù)據(jù)庫中增、刪、改數(shù)據(jù)后,設(shè)備 2 上的應(yīng)用 A 也可以獲取到該數(shù)據(jù)庫變化。可在分布式圖庫、信息、通訊錄、文件管理器等場景中使用。

二、分布式數(shù)據(jù)服務(wù) API

  • HarmonyOS 系統(tǒng)中的分布式數(shù)據(jù)服務(wù)模塊為開發(fā)者提供下面幾種功能:
功能分類接口名稱描述分布式數(shù)據(jù)庫創(chuàng)建、打開、關(guān)閉和刪除isCreateIfMissing()檢查數(shù)據(jù)庫不存在時是否創(chuàng)建setCreateIfMissing(boolean isCreateIfMissing)設(shè)置數(shù)據(jù)庫不存在時是否創(chuàng)建isEncrypt()獲取數(shù)據(jù)庫是否加密setEncrypt(boolean isEncrypt)設(shè)置數(shù)據(jù)庫是否加密getStoreType()獲取分布式數(shù)據(jù)庫的類型setStoreType(KvStoreType storeType)設(shè)置分布式數(shù)據(jù)庫的類型KvStoreType.DEVICE_COLLABORATION設(shè)備協(xié)同分布式數(shù)據(jù)庫類型KvStoreType.SINGLE_VERSION單版本分布式數(shù)據(jù)庫類型getKvStore(Options options, String storeId)根據(jù)Options配置創(chuàng)建和打開標(biāo)識符為storeId的分布式數(shù)據(jù)庫closeKvStore(KvStore kvStore)關(guān)閉分布式數(shù)據(jù)庫deleteKvStore(String storeId)刪除分布式數(shù)據(jù)庫分布式數(shù)據(jù)增、刪、改、查getStoreId()根據(jù)配置構(gòu)造帳號鍵值數(shù)據(jù)庫管理類實(shí)例putBoolean(String key, boolean value)
putInt(String key, int value)
putFloat(String key, float value)
putDouble(String key, double value)
putString(String key, String value)
putByteArray(String key, byte[] value)
putBatch(List entries)插入和更新數(shù)據(jù)delete(String key)
deleteBatch(List keys)刪除數(shù)據(jù)getInt(String key)
getFloat(String key)
getDouble(String key)
getString(String key)
getByteArray(String key)
getEntries(String keyPrefix)查詢數(shù)據(jù)分布式數(shù)據(jù)謂詞查詢select()
reset()
equalTo(String field, int value)
equalTo(String field, long value)
equalTo(String field, double value)
equalTo(String field, String value)
equalTo(String field, boolean value)
notEqualTo(String field, int value)
notEqualTog(String field, long value)
notEqualTo(String field, boolean value)
notEqualTo(String field, String value)
notEqualTo(String field, double value)
greaterThan(String field, int value)
greaterThan(String field, long value)
greaterThan(String field, double value)
greaterThan(String field, String value)
lessThan(String field, int value)
lessThan(String field, long value)
lessThan(String field, double value)
lessThan(String field, String value)
greaterThanOrEqualTo(String field, int value)
greaterThanOrEqualTo(String field, long value)
greaterThanOrEqualTo(String field, double value)
greaterThanOrEqualTo(String field, String value)
lessThanOrEqualTo(String field, int value)
lessThanOrEqualTo(String field, long value)
lessThanOrEqualTo(String field, double value)
lessThanOrEqualTo(String field, String value)
isNull(String field)
orderByDesc(String field)
orderByAsc(String field)
limit(int number, int offset)
like(String field, String value)
unlike(String field, String value)
inInt(String field, List valueList)
inLong(String field, List valueList)
inDouble(String field, List valueList)
inString(String field, List valueList)
notInInt(String field, List valueList)
notInLong(String field, List valueList)
notInDouble(String field, List valueList)
notInString(String field, List valueList)
and()
or()對于Schema數(shù)據(jù)庫謂詞查詢數(shù)據(jù)訂閱分布式數(shù)據(jù)變化subscribe(SubscribeType subscribeType, KvStoreObserver observer)訂閱數(shù)據(jù)庫中數(shù)據(jù)的變化分布式數(shù)據(jù)同步sync(List deviceIdList, SyncMode mode)在手動模式下,觸發(fā)數(shù)據(jù)庫同步

三、分布式數(shù)據(jù)服務(wù)使用流程

① 根據(jù)配置構(gòu)造分布式數(shù)據(jù)庫管理類實(shí)例
  • 根據(jù)應(yīng)用上下文創(chuàng)建 KvManagerConfig 對象。
  • 創(chuàng)建分布式數(shù)據(jù)庫管理器實(shí)例。
  • 以下為創(chuàng)建分布式數(shù)據(jù)庫管理器的代碼示例:
Context context;...KvManagerConfig config = new KvManagerConfig(context);KvManager kvManager = KvManagerFactory.getInstance().createKvManager(config);
② 獲取/創(chuàng)建單版本分布式數(shù)據(jù)庫
  • 聲明需要創(chuàng)建的單版本分布式數(shù)據(jù)庫 ID 描述。
  • 創(chuàng)建單版本分布式數(shù)據(jù)庫,跨設(shè)備自動同步數(shù)據(jù)庫功能默認(rèn)開啟。
  • 以下為創(chuàng)建單版本分布式數(shù)據(jù)庫的代碼示例:
Options CREATE = new Options();CREATE.setCreateIfMissing(true).setEncrypt(false).setKvStoreType(KvStoreType.SINGLE_VERSION);String storeID = "testApp";SingleKvStore singleKvStore = kvManager.getKvStore(CREATE, storeID);
③ 訂閱分布式數(shù)據(jù)變化
  • 客戶端需要實(shí)現(xiàn) KvStoreObserver 接口。
  • 構(gòu)造并注冊 KvStoreObserver 實(shí)例。
  • 以下為訂閱單版本分布式數(shù)據(jù)庫所有(本地及遠(yuǎn)端)數(shù)據(jù)變化通知的代碼示例:
class KvStoreObserverClient implements KvStoreObserver {@Overridepublic void onChange(ChangeNotification notification) {List<Entry> insertEntries = notification.getInsertEntries();List<Entry> updateEntries = notification.getUpdateEntries();List<Entry> deleteEntries = notification.getDeleteEntries();}}KvStoreObserver kvStoreObserverClient = new KvStoreObserverClient();singleKvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL, kvStoreObserverClient);
④ 將數(shù)據(jù)寫入單版本分布式數(shù)據(jù)庫
  • 構(gòu)造需要寫入單版本分布式數(shù)據(jù)庫的 Key(鍵)和 Value(值)。
  • 將鍵值數(shù)據(jù)寫入單版本分布式數(shù)據(jù)庫。
  • 以下為將字符串類型鍵值數(shù)據(jù)寫入單版本分布式數(shù)據(jù)庫的代碼示例:
String key = "todayWeather";String value = "Sunny";singleKvStore.putString(key, value);
⑤ 查詢單版本分布式數(shù)據(jù)庫數(shù)據(jù)
  • 構(gòu)造需要從單版本分布式數(shù)據(jù)庫快照中查詢的 Key(鍵)。
  • 從單版本分布式數(shù)據(jù)庫快照中獲取數(shù)據(jù)。
  • 以下為從單版本分布式數(shù)據(jù)庫中查詢字符串類型數(shù)據(jù)的代碼示例:
String key = "todayWeather";String value = singleKvStore.getString(key);
⑥ 同步數(shù)據(jù)到其他設(shè)備
  • 獲取已連接的設(shè)備列表。
  • 選擇同步方式進(jìn)行數(shù)據(jù)同步。
  • 以下為單版本分布式數(shù)據(jù)庫進(jìn)行數(shù)據(jù)同步的代碼示例,其中同步方式為 PUSH_ONLY:
List<DeviceInfo> deviceInfoList = kvManager.getConnectedDevicesInfo(DeviceFilterStrategy.NO_FILTER);List<String> deviceIdList = new ArrayList<>();for (DeviceInfo deviceInfo : deviceInfoList) {deviceIdList.add(deviceInfo.getId());}singleKvStore.sync(deviceIdList, SyncMode.PUSH_ONLY);
⑦ 關(guān)閉單版本分布式數(shù)據(jù)庫
  • 以下為關(guān)閉單版本分布式數(shù)據(jù)庫的代碼示例:
kvManager.closeKvStore(singleKvStore);
⑧ 刪除單版本分布式數(shù)據(jù)庫
  • 以下為刪除單版本分布式數(shù)據(jù)庫的代碼示例:
kvManager.deleteKvStore(storeID);

總結(jié)

以上是生活随笔為你收集整理的HarmonyOS之数据管理·分布式数据服务的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99国产精品自拍 | 青青草一区二区三区 | 精品免费一区二区三区 | 三级免费观看 | 国产精品19乱码一区二区三区 | 亚洲伦理在线 | 午夜人体视频 | 久久露脸国语精品国产 | 日韩a级片在线观看 | 国产裸体舞一区二区三区 | 国产大片黄 | 国产91丝袜 | 国产永久免费无遮挡 | 91九色在线播放 | 久久久久在线 | 日本美女全裸 | 国产一区二区在线视频观看 | 美日韩黄色 | 成人精品久久久午夜福利 | 亚洲视屏 | 韩国精品视频在线观看 | 黄色成年人网站 | 久久女人网 | 91精品91| 人人干夜夜操 | 女人18毛片毛片毛片毛片区二 | 天天性综合 | 69堂精品 | 在线免费a视频 | 精品视频一区二区三区在线观看 | 国产免费一区二区三区视频 | 黑人糟蹋人妻hd中文字幕 | 2019毛片 | av收藏小四郎最新地址 | 帮我拍拍漫画全集免费观看 | 国产成人精品一区二区在线观看 | 色多多污污 | 国内视频精品 | 肉视频在线观看 | 亚洲欧美一区二区精品久久久 | zoo性欧美 | 精品国产av鲁一鲁一区 | 久久成人一区二区 | 少妇熟女一区二区 | 老妇高潮潮喷到猛进猛出 | 乱一色一乱一性一视频 | 精品人妻一区二区三区香蕉 | 久久久久成人片免费观看蜜芽 | 中国新婚夫妻性猛交 | 日韩电影一区二区三区四区 | 亚州一区二区 | 成人福利视频网站 | 亚洲午夜精选 | 自拍毛片| 国产一级特黄视频 | 情侣作爱视频网站 | av网站大全在线观看 | 调教驯服丰满美艳麻麻在线视频 | 日韩有码一区二区三区 | 一级免费黄色大片 | 1024手机在线观看 | 国产内射一区 | 精品乱子伦 | 日韩在线一级 | 国产亚洲成av人在线观看导航 | 日韩久久久 | 精品久久免费观看 | 都市激情一区 | 美女裸体跪姿扒开屁股无内裤 | 跪求黄色网址 | 欧美一级片免费看 | 久久爱一区二区 | 性巴克成人免费网站 | 精品www久久久久久奶水 | 天堂资源地址在线 | 婷婷.com| 国产三级中文字幕 | 无码人妻少妇色欲av一区二区 | 国产视频你懂的 | 美国毛片网站 | 操女人网 | 亚洲AV成人无码久久精品同性 | 男男做的视频 | 国产精品毛片一区二区三区 | 91精品久久久久久久久久 | 99视频在线播放 | 亚洲精品高潮 | 吞精囗交69激情欧美 | 国产黄色片在线免费观看 | 美女张开腿流出白浆 | 一区二区三区 欧美 | 欧美大胆视频 | 三级免费观看 | 免费看黄的网址 | 欧美久久久久久久久 | 精品交短篇合集 | 在线观看sm| 免费在线观看黄视频 | 国产色呦呦 |