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

SQL Server 2005中數據挖掘算法擴展方法

運維 數據庫運維 SQL Server 算法
本文將介紹SQL Server 2005 Analysis Services中數據挖掘算法擴展方法,在平時開發中我們需要根據要求來擴展SSAS的挖掘算法。

SSAS為我們提供了九種數據挖掘算法,但是在應用中我們需要根據實際問題設計適當的算法,這個時候就需要擴展SSAS,使它能應用更多的算 法,SSAS有比較好的可擴展性,它提供了一個完整的機制來進行擴展,只要繼承一些類并按適當的方法進行注冊就可以在SSAS中使用自己的算法了。

下面我將通過實例分別用幾篇文章來介紹一下如何開發SSAS算法插件。本文介紹的算法插件開發方法是基于托管代碼的,是用C#開發的(算法插件也可以用C++開發,并且SQLSERVER2005的案例中附帶C++版本的代碼stub)。整個過程大至為六個步驟。在開始開發之前需要做一些準備工作,就是要去下載 一個用C++編寫的COM組件,叫DMPluginWrapper(可以通過下載本文附帶的附件獲得),它作為SSAS與算法插件的中間層,用于處理 SSAS與算法插件之間的交互以及封裝從SSAS到算法插件的參數和從算法插件到SSAS的處理結果。DMPluginWrapper、SSAS和算法插 件之間的關系可以由下圖來描述。

 

圖表 1: DMPluginWrapper、SSAS和算法插件之間的關系

下面開始創建算法擴展的項目。

首先新建一個類庫項目(名為AlgorithmPlugin)將剛才的DMPluginWrapper項目引用到新建的這個 AlgorithmPlugin類庫項目中。你可以選擇為這個類庫項目進行程序集簽名,這樣就可以將其注冊到GAC中。另外還要為 DMPluginWrapper添加后生成腳本將程序集注冊到GAC,參考腳本如下(根據機器具體設置而定):

"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe" $(TargetPath) 
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u $(TargetName)
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if $(TargetPath)

如果***行腳本不能正確運行的話,算法插件是不能被SQLSERVER分析服務器識別的。另外兩行腳本就是將算法程序集注冊到GAC。

接下來的幾個步驟主要是繼承一些基類的工作,包括AlgorithmMetadataBase類、AlgorithmBase類和 ICaseProcessor接口和AlgorithmNavigationBase類。首先在AlgorithmPlugin中新建一個類文件并命名為 Metadata,為這個類添加ComVisible、MiningAlgorithmClass(typeof(Algorithm))和Guid屬性 (Algorithm是下面要創建的算法類),并為Guid屬性指定一個GUID編碼。這個類要繼承于AlgorithmMetadataBase類。現 在要做的事情就是覆蓋基類的方法。下面是所有需要覆蓋的方法(對于較簡單的實現寫在表格中):

方法名實現(參考)備注

GetServiceName
 return "MyFirstAlgorithmPlugin"
 這個方法的返回值中不能帶有空格字符
 
GetServiceDescription
 return "Sample Algorithm Plugin";
  
GetServiceType
 PlugInServiceType.ServiceTypeOther;
  
GetViewerType
 return string.Empty
  
GetScaling
 return MiningScaling.Medium;

用于指定算法適用的規模,這個值不會被服務器使用而是顯示在模式行集中,為用戶提供算法的一些相關信息。

GetTrainingComplexity

return MiningTrainingComplexity.Low

用于指定算法訓練適用的復雜度,這個值不會被服務器使用而是顯示在模式行集中,為用戶提供算法的一些相關信息。

GetPredictionComplexity

return MiningPredictionComplexity.Low

用于指定預測復雜度,這個值不會被服務器使用而是顯示在模式行集中,為用戶提供算法的一些相關信息。

 
GetSupportsDMDimensions
 retrun false;
  
GetSupportsDrillThrough
 return false;
 指定這個算法是否支持鉆透功能。
 
GetDrillThroughMustIncludeChildren
 return false;
  
GetCaseIdModeled
 return false;
  
GetMarginalRequirements
 return MarginalRequirements.AllStats
  
GetParametersCollection
 return null;
 算法參數,因為本文中的例子沒有參數,所以這里返回空。
 
GetSupInputContentTypes
 MiningColumnContent[] arInputContentTypes = new MiningColumnContent[]

{

MiningColumnContent.Discrete,

MiningColumnContent.Continuous,

MiningColumnContent.Discretized,

MiningColumnContent.NestedTable,

MiningColumnContent.Key

};

 

return arInputContentTypes;
 指定算法所支持的輸入屬性的數據類型,如連續型、離散型等。
 
GetSupPredictContentTypes
 MiningColumnContent[] arPredictContentTypes = new MiningColumnContent[]

{

MiningColumnContent.Discrete,

MiningColumnContent.Continuous,

MiningColumnContent.Discretized,

MiningColumnContent.NestedTable,

MiningColumnContent.Key

};

return arPredictContentTypes;
 與上一個方法類似,這里是指定預測屬性所支持的數據類型。
 
GetSupportedStandardFunctions
 SupportedFunction[] arFuncs

= new SupportedFunction[] {

    SupportedFunction.PredictSupport,

    SupportedFunction.PredictHistogram,

SupportedFunction.PredictProbability,

SupportedFunction.PredictAdjustedProbability,

SupportedFunction.PredictAssociation,

SupportedFunction.PredictStdDev,

SupportedFunction.PredictVariance,

SupportedFunction.RangeMax,

SupportedFunction.RangeMid,

SupportedFunction.RangeMin,

SupportedFunction.DAdjustedProbability,

SupportedFunction.DProbability,

SupportedFunction.DStdDev,

SupportedFunction.DSupport,

SupportedFunction.DVariance,

// content-related functions

SupportedFunction.IsDescendent,

SupportedFunction.PredictNodeId,

SupportedFunction.IsInNode,

SupportedFunction.DNodeId,

};

return arFuncs;
 指定DMX所支持的函數。
 
CreateAlgorithm
 return new Algorithm();
 返回算法實例,Algorithm是接下來要創建的類。
 

 

現在創建第二個類,命名為Algorithm.cs。這個類要繼承于AlgorithmBase并實現ICaseProcesses接口,這是實現算法最重要的一個類,主要的算法處理都在這個類中進行。這個類要有一個成員變量TaskProgressNotification trainingProgress。這個類包含了算法主要的處理邏輯。下面是要實現的方法:

方法名: 

//處理樣本

InsertCases

參考實現: 

Code
//遍歷所有的樣本并且每處理100個樣本更新一次處理進度。
trainingProgress = this.Model.CreateTaskNotification();

// 設置當前的處理進度為0
trainingProgress.Current = 0;

// 取得總的樣本數量。
trainingProgress.Total =
(int)this.MarginalStats.GetTotalCasesCount();

// 為跟蹤提示信息設置格式字符串
trainingProgress.Format = "Processing cases: {0} out of {1}";

// 開始處理
trainingProgress.Start();
bool success = false;
try
{
caseSet.StartCases(this);
success = true;
}
finally
{
trainingProgress.End(success);
}

 

方法名:ProcessCase

參考實現:

Code
// 檢查并確認處理過程沒有被中斷。
this.Context.CheckCancelled();

// 更新當前的進度值
trainingProgress.Current++; 

if (caseId % 100 == 0)

{

trainingProgress.Progress();

}

//TODO: 在這里進行實際的模型訓練處理邏輯

 


方法名:SaveContent

參考實現: 

Code
//創建一個自定義的標簽內容用于保存處理結果(其結構類似XML),MyPersistenceTag是自定義的枚舉類型

writer.OpenScope((PersistItemTag)MyPersistenceTag.ShellAlgorithmContent);
writer.SetValue(System.DateTime.Now);
writer.SetAttribute((PersistItemTag)MyPersistenceTag.NumberOfCases,
this.MarginalStats.GetTotalCasesCount());
writer.CloseScope();

 

方法名:LoadContent

參考實現:

Code
//打開自定義的標簽(與SaveContent方法相對應)
reader.OpenScope((PersistItemTag)MyPersistenceTag.ShellAlgorithmContent);

//讀取處理時間

System.DateTime processingTime;
reader.GetValue(out processingTime);

// 取得處理的樣本數量
uint numberCases = 0;

reader.GetAttribute((PersistItemTag)MyPersistenceTag.NumberOfCases, out numberCases);
reader.CloseScope();

 

方法名:Predict

參考實現:

Code
AttributeGroup targetAttributes = predictionResult.OutputAttributes;
targetAttributes.Reset();
uint nAtt = AttributeSet.Unspecified; 

//對于每一個目標屬性,從訓練集中復制預測結果
while (targetAttributes.Next(out nAtt))
{
     //創建一個AttributeStatistics對象用于保存對當前目標屬性的預測結果
    AttributeStatistics result = new AttributeStatistics();

    //設置預測結果中的目標屬性,即當前的預測結果針對于哪個輸入屬性
    result.Attribute = nAtt;

    // 取得當前屬性的概率統計值,也即通過模型訓練得到的邊緣統計概率。
   AttributeStatistics trainingStats = this.MarginalStats.GetAttributeStats(nAtt);

    //復制其余的數據到結果對象
   result.AdjustedProbability = trainingStats.AdjustedProbability;
    result.Max = trainingStats.Max;
    result.Min = trainingStats.Min;
    result.Probability = trainingStats.Probability;
    result.Support = trainingStats.Support; 

    //復制狀態統計到結果對象中
    if (predictionResult.IncludeStatistics)
    {
        for ( int nIndex = 0; nIndex < trainingStats.StateStatistics.Count; nIndex++)
{
    bool bAddThisState = true;

    // 如果是丟失值狀態,那么只有當需要的時候才將其包含在結果之中。
   if (trainingStats.StateStatistics[0].Value.IsMissing)
    {
        bAddThisState = predictionResult.IncludeMissingState;
    } 

    if (bAddThisState)
    {
        result.StateStatistics.Add(
            trainingStats.StateStatistics[(uint)nIndex]);
    }
}
}

//如果預測需要內容結點,就要為內容結點設置一個唯一的編號
if (predictionResult.IncludeNodeId)
{
    result.NodeId = "000";
}
predictionResult.AddPrediction(result);


方法名:GetNavigator

參考實現:   

Code
//AlgorithmNavigator是下面要創建的類
return new AlgorithmNavigator(this, forDMDimensionContent);

 


接下來要實現的是AlgorithmNavigator類,這個類要繼承于 AlgorithmNavigationBase。這個類主要用于顯示算法處理結果中所有結點的信息。在這個類中有三個成員變量:Algorithm類型 的algorithm、bool類型的forDMDimension和int類型的currentNode。下面是這個類要實現的方法:

    方法名(構造方法):AlgorithmNavigator

    參考實現:

Code
this.algorithm = currentAlgorithm;
this.forDMDimension = dmDimension;
this.currentNode = 0;


方法名
 實現
 備注
 
MoveToNextTree
 return false;
  
GetCurrentNodeId
 return currentNode;
  
ValidateNodeId
 return (nodeId == 0);
  
LocateNode
 if (!ValidateNodeId(nodeId))

return false;

currentNode = nodeId;

return true;
  
GetNodeIdFromUniqueName
 int nNode = Convert.ToInt32(nodeUniqueName);

return nNode;
  
GetUniqueNameFromNodeId
 return nodeId.ToString("D3");
 按三位數字的格式輸出結點編號
 
GetParentCount
 return 0;
  
GetParentNodeId
 return 0;
  
GetChildrenCount
 return 0
  
GetChildNodeId
 return -1;
  
GetNodeType
 return NodeType.Model;
  
GetNodeUniqueName
 return GetUniqueNameFromNodeId(currentNode);
  
GetNodeAttributes
 return null;
  

 

方法名:

//此方法返回了描述結點的數值特征

GetDoubleNodeProperty

參考實現:

 

Code
double dRet = 0;
double dTotalSupport = lgorithm.MarginalStats.GetTotalCasesCount();
double dNodeSupport = 0.0;
dNodeSupport = dTotalSupport;
switch (property)
{
//結點的支持度
case NodeProperty.Support:
dRet = dNodeSupport;
break;
case NodeProperty.Score:
dRet = 0;
    break;
         //結點概率
       case NodeProperty.Probability:
         dRet = dNodeSupport / dTotalSupport;
    break;
         //結點的邊緣概率
       case NodeProperty.MarginalProbability:
         dRet = dNodeSupport / dTotalSupport;
         break;
    }
return dRet;


    方法名:

//取得結點的字符串表示

GetStringNodeProperty

    參考實現:    

Code
string strRet = "";
switch (property)
{
    case NodeProperty.Caption:
    {
        strRet = algorithm.Model.FindNodeCaption(GetNodeUniqueName());
        if (strRet.Length == 0)
        {
            strRet = "All";
        }
    }
    break;
   
    case NodeProperty.ConditionXml:
    strRet = "";
    break;
   
    case NodeProperty.Description:
    strRet = "All Cases";
    break;
   
    case NodeProperty.ModelColumnName:
    strRet = "";
    break;
   
    case NodeProperty.RuleXml:
    strRet = "";
    break;
   
    case NodeProperty.ShortCaption:    
    strRet = "All";
    break;
}
return strRet;

 

 

    方法名:

//取得結點的分布

GetNodeDistribution

    參考實現:

 

Code
int attStats = (int)algorithm.AttributeSet.GetAttributeCount();
AttributeStatistics[] marginalStats = new AttributeStatistics[attStats];
for (uint nIndex = 0; nIndex < attStats; nIndex++)
{
    marginalStats[nIndex] = algorithm.MarginalStats.GetAttributeStats(nIndex);
}
return marginalStats;

 


現在我們已經實現了完所有需要要實現的類,***要做的就是將算法插件部署到分析服務器。在完成代碼后,需要將程序集注冊到GAC以便分析服務器 可以從中加載插件。下面的代碼就是將DMPluginWrapper加載到GAC的腳本,如果在本文的開頭正確地在Visual Studio中設置了后生成(Post-Building)腳本的話可以跳過下面的腳本代碼,因為它們是相同的功能:   

//將DMPluginWrapper.dll注冊到GAC中 
"%ProgramFiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u DMPluginWrapper

"%ProgramFiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if DMPluginWrapper.dll

    //將AlgorithmPluging.dll注冊到GAC中并通過REGASM將程序集注冊到注冊表中使其可以用于COM調用
"%WINDIR%\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe" AlgorithmPlugin.dll

"%ProgramFiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u AlgorithmPlugin

"%ProgramFiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if AlgorithmPlugin.dll

注意以上的路徑一定要與自己機器的設置匹配。成功運行上面的腳本后算法插件就被注冊到計算機之中,但要在分析服務器中使用這個算法還有一項工 作,就是把在分析服務器中注冊這個算法。在分析服務器中注冊算法有兩種方式,一種是通過發送XMLA代碼到分析服務器來注冊;另一種是通過修改 SQLSERVER的配置文件來注冊算法插件。下面先說***種: 

通過XMLA方式注冊算法插件——

<!--Template for registering a plug-in algorithm
Replace MyPluginAlgorithm with the ServiceName of your algorithm
Replace 00000000-0000-0000-0000-000000000000 with the Guid of your Algorithm
After deploying, you will need to restart the server to load the plug-in
--><ALTER AllowCreate="true" ObjectExpansion="ObjectProperties"
xmlns="<A >
> <BR><Server xmlns:xsd="<A <A >
<Name>.</Name> <ServerProperties> <ServerProperty> 
<!-- 用自己的算法名稱替換 -->
<Name>MyFirstAlgorithmPlugin</Name> <!-- 是否啟用算法 -->
<Value>true</Value> </ServerProperty> <ServerProperty> <!-- 用自己的算法名稱替換 --> <BR><Name>MyFirstAlgorithmPlugin</Name>
<!--算法的GUID(在算法類中指定的GUID) --><Value>00000000-0000-0000-0000-000000000000</Value>
</ServerProperty> </ServerProperties></Server> </ObjectDefinition> </Alter>

通過修改SQLSERVER的配置文件注冊算法——

找到SQLSERVER安裝目錄下的MSSQL.2\OLAP\Config\msmdsrv.ini文件。這個是一個XML格式的文檔。文檔內容類似于下面的代碼:

<ConfigurationSettings>
<DataMining>
<Algorithms>
<!-- 結點中的字符串應該是算法名稱 -->
<AlgorithmPlugin>
    <!-- 是否啟用算法 -->
    <Enabled>1</Enabled>
    <!--算法的GUID (在算法類中指定的GUID)-->
    <CLSID>00000000-0000-0000-0000-000000000000</CLSID>
</AlgorithmPlugin>

在以上的配置信息中算法名稱是來自于Metadata類的GetServiceName這個方法,即在配置中設置的算法名稱要與這個方法的返回值相同。到這里一個基本的算法插件程序就完成了,重啟分析服務器后就可以在建立挖掘模型的窗口中看到新的算法出現在算法下拉列表中了。

從建立算法插件的整個過程來看,除開前后的準備工作和部署主要就是對三個類的重寫,而其中最主要的類就是算法類的重寫,其它兩個類的主要作用是為算法提供元數據信息及結果的描述。在算法類中要實現挖掘模型的樣本訓練以及預測,這是算法最關鍵的地方,重寫算法類中的ProcessCase方法和Predict方法是算法插件的核心。在了解如何擴展算法后要做的工作就是設計新的算法或將已經完成的算法集成到插件中。

【編輯推薦】

  1. 淺談SQL Server數據庫并發測試方法
  2. 淺談如何優化SQL Server服務器
  3. Oracle與SQL Server數據庫鏡像對比


責任編輯:彭凡 來源: cnblogs
相關推薦

2010-07-12 12:41:16

SQL Server

2009-08-05 10:00:04

數據挖掘算法SQL Server

2010-07-09 11:06:13

SQL Server

2009-07-03 19:58:51

SQL Server2

2010-09-06 11:46:03

SQL Server語句

2011-04-06 17:30:41

SQL ServerSQL

2010-11-09 16:14:52

卸載SQL Serve

2010-10-21 15:13:20

SQL Server系

2011-04-01 12:19:21

SQL Server商業智能

2011-07-26 10:16:14

SQL Server數據挖掘

2011-07-25 15:39:49

SQL SERVER數聚類算法順序聚類算法

2009-02-16 13:21:25

數據挖掘SQL Server SQL Server

2011-09-01 16:13:37

Visual StudSQL Server 存儲過程

2010-07-23 12:55:29

SQL Server

2009-02-23 13:41:42

XML操作函數SQL Server

2010-07-13 16:48:14

SQL Server

2011-04-02 16:20:21

SQL SERVER 同步復制

2011-03-21 13:44:38

SQL ServerSQL Server2分頁

2011-04-02 15:41:31

2011-04-06 13:04:35

SQL Server 密碼修改
點贊
收藏

51CTO技術棧公眾號

中文字幕亚洲精品一区| 精品影片一区二区入口| 国内精品不卡| 成人动漫在线一区| 国产精品91一区| 国产色无码精品视频国产| 亚洲精品观看| 日本久久一区二区三区| 久久久久久久久久久久久国产| 少妇高潮一区二区三区69| 日韩在线一区二区| 欧美激情aaaa| 久久久精品成人| 卡一精品卡二卡三网站乱码| 欧美最猛黑人xxxxx猛交| 成人高清dvd| 91精品大全| 9l国产精品久久久久麻豆| 国产男女猛烈无遮挡91| 久久午夜免费视频| 亚洲精品国产成人影院| 亚洲精品视频免费| 粗大的内捧猛烈进出视频| 亚洲国产尤物| 欧美日韩日本国产| 国产乱子伦精品视频| 国产免费a∨片在线观看不卡| 国产91精品欧美| 国产色综合天天综合网| 国产91精品一区| 亚洲高清网站| 久久999免费视频| 女性裸体视频网站| 成人网18免费网站| 亚洲精品国产精品久久清纯直播| 久久精品国产99久久99久久久| 日韩精品免费观看视频| 欧美天天综合色影久久精品| 一本二本三本亚洲码| 超碰国产在线观看| 国产亚洲欧美激情| 免费av在线一区二区| 好吊色视频一区二区| 国产精品一区二区在线观看不卡 | 久久人人爽人人爽人人片亚洲| 色婷婷av777| 欧美丝袜美腿| 亚洲激情在线观看视频免费| 国产精品91av| 亚洲精品a区| 欧美变态凌虐bdsm| 一卡二卡三卡四卡五卡| 日韩成人视屏| 欧美成人猛片aaaaaaa| 女王人厕视频2ⅴk| 亚洲91网站| 欧美成人一区二区三区在线观看 | 最新在线中文字幕| 日本中文在线一区| 国产精品爽爽ⅴa在线观看| 国产精品成人久久久| 男人的j进女人的j一区| 国产精品人成电影| 国产又粗又猛又黄又爽| 黄页网站大全一区二区| 亚洲最大av网| 亚洲av无码乱码国产精品| 国产福利一区二区三区视频在线 | 国产精品福利片| 国产成人av免费| 久久se这里有精品| 亚洲中国色老太| 欧美熟女一区二区| 97久久精品人人做人人爽50路| 美女精品国产| 生活片a∨在线观看| 成人免费一区二区三区在线观看| 麻豆一区二区三区在线观看| 精灵使的剑舞无删减版在线观看| 亚洲mv在线观看| aaaaaa亚洲| 99er精品视频| 亚洲精品456在线播放狼人| 国产精品1000部啪视频| 久久精品国产大片免费观看| 九九精品视频在线观看| 国产剧情在线视频| 精品一区二区三区影院在线午夜| 999精品视频一区二区三区| 天天干天天做天天操| 国产女人aaa级久久久级| 亚洲成年人专区| 国产黄大片在线观看| 在线免费观看日本一区| 秋霞午夜鲁丝一区二区 | 视频在线精品一区| 欧美14一18处毛片| 色94色欧美sute亚洲13| 欧美国产日韩在线视频 | 神马影院一区二区| 日本高清在线观看| 欧美性色黄大片| av电影在线播放| 欧美肉体xxxx裸体137大胆| 欧美精品免费在线观看| 秋霞av一区二区三区| 国产盗摄精品一区二区三区在线 | 精品熟女一区二区三区| 日韩三级在线| 欧美在线视频一二三| 国产农村妇女毛片精品久久| 久久天堂av综合合色蜜桃网| www国产免费| 国产亚洲欧美日韩精品一区二区三区 | 午夜婷婷国产麻豆精品| 亚洲黄色av片| 欧美日韩xxxx| 91禁外国网站| 国产黄色片网站| 国产精品区一区二区三区| 日韩欧美一区二| 久久爱www.| 久久好看免费视频| 中文在线a天堂| 久久精品亚洲麻豆av一区二区 | 精品动漫一区二区三区在线观看| 久久精品日韩无码| 蜜臀久久99精品久久久久宅男| 精品在线视频一区二区三区| 日本乱理伦在线| 欧美一区二区在线免费观看| 激情五月深爱五月| 天堂va蜜桃一区二区三区漫画版| 国内精品一区二区| 丁香高清在线观看完整电影视频| 在线播放国产精品二区一二区四区| 国产精品美女高潮无套| 久久国产高清| 老牛影视免费一区二区| sm捆绑调教国产免费网站在线观看| 欧美岛国在线观看| 欧美黄片一区二区三区| 国产尤物一区二区在线| av电影一区二区三区| 伊人久久大香线蕉综合影院首页| 日韩中文字幕视频在线| 一区精品在线观看| 国产精品国产自产拍高清av| 99视频在线视频| 成人精品久久| 国产精品永久免费| 欧美成人三区| 7777女厕盗摄久久久| 成年人午夜剧场| 国产成a人无v码亚洲福利| av日韩在线看| 日韩一二三区在线观看| 欧美大片免费观看在线观看网站推荐| 国产aⅴ一区二区三区| 一区二区三区日韩在线观看| 熟妇女人妻丰满少妇中文字幕| 欧美久久99| 国产精品区一区二区三在线播放 | 黄色电影免费在线看| 日本乱人伦一区| 网爆门在线观看| 国产一区二区导航在线播放| 国产一级做a爰片久久毛片男| xxxxxhd亚洲人hd| 午夜精品久久久99热福利| 三级无遮挡在线观看| 色吊一区二区三区| 亚洲视频重口味| 东方aⅴ免费观看久久av| 亚洲熟妇无码另类久久久| 自拍自偷一区二区三区| 国产精品精品国产| 在线中文免费视频| 日韩激情视频在线| 99re热视频| 亚洲精选在线视频| 午夜一区二区三区免费| 毛片av一区二区| 免费的一级黄色片| 一区二区三区日本久久久| 国产九九精品视频| 丁香影院在线| 中文字幕日本欧美| 好吊色一区二区三区| 在线欧美日韩国产| 精品少妇久久久| 国产人妖乱国产精品人妖| 51自拍视频在线观看| 国产日韩欧美一区| 日韩视频在线免费播放| 中日韩免视频上线全都免费| 91久久在线观看| 黄色在线免费观看网站| 日韩日本欧美亚洲| 丝袜视频国产在线播放| 欧美喷潮久久久xxxxx| 国产黄色片免费看| 中文字幕综合网| 亚洲一区视频在线播放| 国产高清久久久| 91女神在线观看| 香蕉久久国产| 免费网站永久免费观看| 国产一区二区在线| 国内视频一区| 一本一道久久a久久| 国产精品无av码在线观看| 国产白浆在线免费观看| 欧美成人手机在线| av在线电影播放| 日韩久久精品电影| 国产综合在线播放| 欧美一区三区二区| 中文字幕a级片| 欧美性猛交xxxx| 日韩精品在线不卡| 一区二区三区美女视频| 精品视频第一页| 国产女人18水真多18精品一级做 | 亚洲视频一区在线| 亚洲日本精品视频| 2021国产精品久久精品| 色哟哟视频在线| 国产精品一二三区在线| aaa一级黄色片| 久久99久久99| 日本高清久久久| 理论电影国产精品| 亚洲综合色在线观看| 久久久久久穴| 毛葺葺老太做受视频| 午夜在线视频一区二区区别| 日本在线xxx| 日韩午夜激情| 91视频 -- 69xx| aa国产精品| 免费毛片小视频| 国产精品久久久久久久免费软件 | 无码人妻aⅴ一区二区三区日本| 成人情趣视频网站| 一区二区三区四区视频在线观看| 日韩电影二区| 亚洲无玛一区| 久久久久久久久久久久久久久久久久| 亚洲综合网中心| 国产精品国产三级国产在线观看| 日本黄色播放器| 亚洲乱码免费伦视频| 在线观看三级网站| 亚洲午夜黄色| 久久久999视频| 日韩激情一二三区| 伊人网在线综合| 国产精品亚洲视频| 亚洲无人区码一码二码三码| av亚洲精华国产精华| 中文字幕丰满孑伦无码专区| 久久久一区二区三区捆绑**| 国产一级淫片久久久片a级| 亚洲欧洲成人av每日更新| 天堂网avav| 亚洲一区二区黄色| 特级西西444www大精品视频免费看| 欧美丝袜一区二区| 亚洲天堂久久久久| 欧美videos中文字幕| 日韩中文字幕免费在线观看| 亚洲美女在线视频| 天天影视久久综合| 欧美国产日韩一区| 另类激情视频| 91久久国产婷婷一区二区| 成人福利一区| 奇米精品在线| 真实国产乱子伦精品一区二区三区| 欧美精品卡一卡二| 老**午夜毛片一区二区三区| 成人不卡免费视频| 97久久超碰国产精品电影| 久久久久亚洲AV成人无在| 一区二区在线观看视频在线观看| 国产稀缺真实呦乱在线| 欧美丝袜第三区| 精品久久久久久亚洲综合网站 | 偷拍女澡堂一区二区三区| 中文无字幕一区二区三区| 久久艹精品视频| 在线观看日韩精品| 亚洲精品字幕在线| 揄拍成人国产精品视频| 爱啪啪综合导航| 成人免费观看网址| 日韩伦理一区二区三区| 中国一级黄色录像| 狂野欧美性猛交xxxx巴西| 久久久高清视频| 中文字幕在线播放不卡一区| 久草手机在线观看| 91精品久久久久久久91蜜桃 | 极品国产人妖chinesets亚洲人妖| 日本一区二区三区四区高清视频 | 亚洲调教一区| 欧美美女黄色网| 久久99精品久久久久久国产越南| 亚洲制服丝袜在线播放| 亚洲三级在线播放| 性色av一区二区三区四区| 亚洲精品白浆高清久久久久久| 久草免费在线| 国产精品美乳在线观看| 亚洲精品3区| 超碰成人免费在线| 国产精品亚洲午夜一区二区三区 | 在线播放国产精品二区一二区四区| 男女视频在线观看免费| 欧美黑人又粗大| www一区二区三区| 亚洲自拍的二区三区| 日本欧美加勒比视频| 波多野结衣 在线| 五月开心婷婷久久| 高h调教冰块play男男双性文| 久久夜精品va视频免费观看| 国产亚洲精彩久久| 亚洲看片网站| 日本在线播放一区二区三区| 国产精品三级在线观看无码| 亚洲不卡在线观看| 蜜桃av中文字幕| 久久久久久久久久久91| 亚洲国产aⅴ精品一区二区| 中文字幕一区二区三区有限公司| 久久久久欧美精品| 中文字幕一区二区三区人妻| 黄色精品在线看| 少妇精品高潮欲妇又嫩中文字幕| 欧美激情第6页| 最新国产精品精品视频| 日本a在线天堂| 福利一区福利二区| 九九视频免费看| 日韩欧美中文字幕公布| 曰本三级在线| 国产精品乱码视频| 亚洲区一区二| 手机在线看片日韩| 一本色道亚洲精品aⅴ| 国产在线自天天| 国产精品视频在线播放| 99re66热这里只有精品8| 天天操狠狠操夜夜操| 亚洲欧美偷拍卡通变态| 国产福利视频导航| 欧美激情在线观看视频| 欧美交a欧美精品喷水| 国产在线青青草| 亚洲国产精品二十页| 国产精品女同一区二区| 欧美成人午夜激情视频| 白白在线精品| 欧美私人情侣网站| 国产精品视频麻豆| www.黄色一片| 91爱爱小视频k| 不卡一区2区| 免费黄色在线播放| 日韩欧美国产中文字幕| 18免费在线视频| 97夜夜澡人人双人人人喊| 亚洲一区二区成人| 1024手机在线观看你懂的| 91精品国产色综合久久不卡蜜臀| 青春草视频在线观看| 欧美日韩精品久久久免费观看| 毛片一区二区三区| 国产午夜精品无码一区二区| 亚洲少妇激情视频| 精品国产鲁一鲁****| 男人日女人下面视频| 国产农村妇女毛片精品久久麻豆| a毛片在线免费观看| 日本精品一区二区三区在线| 99久久.com| 97人妻天天摸天天爽天天| 欧美丰满嫩嫩电影| 欧美亚洲日本精品| 亚洲乱码一区二区三区| 国产一区二区三区久久久 | 久久久久久久尹人综合网亚洲| 亚洲欧美精品久久| 亚洲国产精品高清久久久| 亚洲综合资源| av视屏在线播放| 亚洲超碰精品一区二区| 男人影院在线观看|