精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲色图17p| 一区二区三区欧美激情| 国产成人精品在线播放| 五月婷婷六月香| 国产午夜久久av| 午夜久久久影院| 亚洲乱码一区二区三区三上悠亚| 国产女同91疯狂高潮互磨| 影音先锋国产精品| 最新中文字幕亚洲| 97人妻精品一区二区三区免费| 韩日成人影院| 一区二区三区日韩在线观看| 秋霞久久久久久一区二区| 国产肥老妇视频| 日韩成人av影视| 97精品视频在线| www色aa色aawww| 欧美激情在线精品一区二区三区| 日韩欧美黄色影院| 午夜免费高清视频| 涩涩网在线视频| 亚洲精品精品亚洲| 亚洲欧美国产一区二区| 日本高清视频www| 国产在线精品一区二区| 国产福利视频一区| www.av麻豆| 欧美日韩蜜桃| 欧美成人高清视频| 在线观看日本中文字幕| 精品三级在线观看视频| 91精品久久久久久久久99蜜臂| 男女视频一区二区三区| 国产v日韩v欧美v| 亚洲精品第一国产综合野| 亚洲国产欧美日韩| 青青青手机在线视频观看| 成人h精品动漫一区二区三区| 成人免费淫片视频软件| 中文亚洲av片在线观看| 久久青草久久| 日韩免费观看网站| 久久中文字幕免费| 亚洲在线成人| 538国产精品视频一区二区| 精品一区二区三区四| 在线成人直播| 精品自在线视频| avove在线播放| 在线成人超碰| 欧美黑人巨大xxx极品| 精品欧美一区二区久久久久| 99久久影视| 日韩网站在线观看| 97在线观看视频免费| 日韩一区自拍| 久久艹在线视频| 欧美日韩在线视频免费播放| 欧美在线91| 欧美激情亚洲国产| 日本三级视频在线| 国产精品久久久久久久久久妞妞 | aaa日本高清在线播放免费观看| 久久综合久久综合九色| 欧美一区免费视频| 91黑丝在线观看| 国产三级在线观看完整版| 国产一区二区亚洲| 在线精品国产欧美| 中文字幕在线观看2018| 午夜电影亚洲| 97香蕉久久夜色精品国产| 中文字幕在线观看视频网站| 久久精品系列| 成人国产精品一区二区| 国产成a人亚洲精v品无码| 成人中文字幕合集| 久久婷婷开心| 69久久久久| 亚洲自拍与偷拍| 日韩人妻精品无码一区二区三区| 亚洲成人人体| 欧美精品久久一区| 午夜福利三级理论电影| 五月天亚洲色图| 中文字幕无线精品亚洲乱码一区 | 成人av福利| 亚洲.国产.中文慕字在线| 干日本少妇首页| 伊人久久一区| 日韩精品视频免费在线观看| 亚洲高潮女人毛茸茸| 欧美日韩国产高清| 日韩69视频在线观看| 国产伦精品一区二区三区四区 | 欧美hdxxx| 在线观看一区二区视频| 欧美高清精品一区二区| 精品一区亚洲| 色与欲影视天天看综合网| 五月婷婷色丁香| 国产在线精品免费| 精品国产免费人成电影在线观看四季 | 日韩欧美一级片| 久久av无码精品人妻系列试探| 日韩大片在线| 7777kkkk成人观看| 国产手机av在线| 久久久一区二区| 9色porny| 色噜噜成人av在线| 亚洲精品乱码久久久久久按摩观| 午夜爱爱毛片xxxx视频免费看| 亚洲欧美清纯在线制服| 91亚洲一区精品| 成黄免费在线| 舔着乳尖日韩一区| 91精品国产高清91久久久久久 | 国产精品国产三级国产普通话蜜臀| 欧美一区二区激情| 豆花视频一区| 亚洲图片欧美午夜| wwwwww国产| 顶级嫩模精品视频在线看| 不卡视频免费播放| 91亚洲精华国产精华| 免费成人av电影| 午夜精品一区在线观看| 日韩av加勒比| 日韩三级在线| 国产成人精品日本亚洲| 手机看片一区二区三区| 一区二区三区中文免费| 成人av毛片在线观看| 精品视频亚洲| 国产不卡一区二区在线播放| 少妇人妻一区二区| 五月婷婷激情综合网| 国产乱淫av麻豆国产免费| 亚欧美无遮挡hd高清在线视频| 国产精品欧美一区二区| 精品影院一区| 色综合久久久久久久久| 黄色在线观看av| 亚洲国产激情| 精品一区二区三区免费毛片| 1区2区3区在线| 亚洲精品电影久久久| 色网站在线播放| 99视频精品免费视频| 免费观看精品视频| 九九久久婷婷| 精品视频在线免费看| 成人在线播放av| 丝袜美腿美女被狂躁在线观看| 欧美日韩一区二区三区在线 | 成人欧美一区二区三区1314| 亚洲视频一二三四| 亚洲激情五月| 99蜜桃在线观看免费视频网站| 99福利在线| 精品裸体舞一区二区三区| 国产精品999久久久| 91在线高清观看| 欧美黑人又粗又大又爽免费| 精品国产91| 91久久国产综合久久91精品网站| 中文字幕伦理免费在线视频| 精品久久久久久久久久久久包黑料| 日韩欧美亚洲一区二区三区| 久久久精品国产免大香伊| 91人人澡人人爽人人精品| 五月久久久综合一区二区小说| 99在线视频播放| 忘忧草在线影院两性视频| 亚洲欧美中文日韩在线| 一级黄色免费片| 亚洲主播在线观看| 强伦人妻一区二区三区| 久久精品国产999大香线蕉| 97超碰在线视| 免费观看不卡av| 亚洲r级在线观看| 国产高清视频色在线www| 亚洲免费在线观看视频| 国语自产在线不卡| 亚洲黄色小说网址| 色婷婷亚洲一区二区三区| 免费黄色国产视频| av电影在线观看一区| 午夜在线观看av| 伊人激情综合| 伊人久久大香线蕉午夜av| 成人高潮视频| 国产欧美精品一区二区| 草美女在线观看| 最近2019好看的中文字幕免费| 性一交一乱一色一视频麻豆| 色乱码一区二区三区88| 黄色一级片在线| 国产亚洲精品久| 中文字幕视频观看| 日本中文字幕一区| www.国产在线视频| 无需播放器亚洲| 欧美日韩精品免费看| 最新国产一区二区| 成人福利在线观看| 欧美激情喷水| 久久久亚洲国产| 国产一区久久精品| 亚洲天堂av在线免费观看| 性生活黄色大片| 欧美高清性hdvideosex| 国产免费一级视频| 亚洲v日本v欧美v久久精品| 男女全黄做爰文章| 国产欧美一区二区精品性色超碰| 在线看黄色的网站| 国产精品一二三四五| 日本xxxx黄色| 日韩精品亚洲专区| 国产精品香蕉在线观看| 在线观看亚洲免费视频| 久久福利影视| 黄色一级在线视频| 国产精品黄色| 一级黄色片播放| 婷婷伊人综合| 人人妻人人澡人人爽精品欧美一区 | 色拍拍在线精品视频8848| www.99re7.com| 亚洲精品免费看| 欧美成人一二三区| 亚洲久草在线视频| 青青草原在线免费观看| 国产精品不卡视频| 91激情视频在线观看| www国产精品av| 青青草视频播放| 国产中文字幕一区| av中文字幕网址| 狠狠色狠狠色综合系列| 日韩av在线中文| 麻豆91精品视频| 午夜xxxxx| 国产一区欧美一区| 欧美日韩一区二区区| 国产一区二区三区免费看 | 亚洲精品无码国产| 国内精品久久久久久久影视蜜臀 | 久久久久久久有限公司| 亚洲精品亚洲人成在线观看| 久久99精品久久久水蜜桃| 亚洲另类av| 秋霞毛片久久久久久久久| 欧美亚洲激情| 色呦呦网站入口| 欧美日韩免费| 亚洲色欲综合一区二区三区| 日韩中文字幕不卡| 亚洲精品成人在线播放| 国产一本一道久久香蕉| 午夜视频在线免费看| gogogo免费视频观看亚洲一| 亚洲做受高潮无遮挡| 久久久青草青青国产亚洲免观| 日本猛少妇色xxxxx免费网站| 国产精品久久久久一区二区三区| 亚洲精品久久久久久国| 精品av中文字幕在线毛片| 777欧美精品| 亚洲国产中文字幕在线| 日韩的一区二区| fc2在线中文字幕| 欧美精品一区在线播放| 国产传媒在线| 91精品国产综合久久男男| 亚洲va欧美va人人爽成人影院| 国产欧美综合精品一区二区| 神马久久一区二区三区| 操bbb操bbb| 宅男噜噜噜66一区二区| 五月婷婷丁香色| 成人毛片在线观看| 亚洲图片第一页| 亚洲国产色一区| 中文字幕在线观看1| 欧美va亚洲va国产综合| 成人高清在线| 欧美激情区在线播放| 无人区在线高清完整免费版 一区二 | 一区二区三区不卡在线| 激情欧美一区| 欧美日韩一区二区三区69堂| 成人黄色av电影| 日本不卡一二区| 色综合久久中文字幕| 国产丰满美女做爰| 亚洲天堂开心观看| 女人黄色免费在线观看| 国产精品香蕉在线观看| 视频小说一区二区| 国产制服91一区二区三区制服| 久久中文精品| 91传媒理伦片在线观看| 亚洲天堂a在线| 无码人妻一区二区三区免费 | 国产在线观看网站| 欧美黄色免费网站| 青青国产精品| 秋霞久久久久久一区二区| 在线欧美视频| 丰满人妻一区二区三区大胸| 国产日韩精品一区二区三区| 日韩精品国产一区二区| 日韩欧美一区二区免费| www.99在线| 国产精品一国产精品| 丁香花在线影院观看在线播放| 国产在线视视频有精品| 少妇高潮惨叫久久久久| 婷婷中文字幕一区三区| 成人1区2区3区| 久久躁狠狠躁夜夜爽| 精品美女一区| 水蜜桃亚洲精品| 美女黄网久久| 国产精品无码一区二区三区免费| 亚洲最大的成人av| 国产高清视频免费| 久久天天躁日日躁| 成人污版视频| 亚洲日本精品国产第一区| 天堂蜜桃91精品| japanese中文字幕| 大桥未久av一区二区三区| 高清乱码毛片入口| 欧美肥婆姓交大片| 日本免费一区二区视频| 精品嫩模一区二区三区| 国产一区二区在线观看视频| 催眠调教后宫乱淫校园| 亚洲国产一区二区视频| 刘亦菲毛片一区二区三区| 欧美激情视频免费观看| 8848成人影院| 亚洲国产精品成人天堂| 东方欧美亚洲色图在线| 日本网站在线免费观看| 亚洲爱爱爱爱爱| 日本在线啊啊| 欧美一区亚洲二区| 日本伊人精品一区二区三区观看方式| 97人妻精品一区二区免费| 日本韩国精品一区二区在线观看| 国产特黄在线| 成人日韩av在线| 午夜电影亚洲| 偷偷色噜狠狠狠狠的777米奇| 丁香五六月婷婷久久激情| 欧美高清成人| 国产精品自产拍在线观| 一级毛片免费高清中文字幕久久网| 免费人成视频在线播放| 亚洲午夜精品久久久久久久久| 天天操天天干天天干| 日本91av在线播放| 日韩成人影院| 粗大的内捧猛烈进出视频| 精品久久久久久亚洲国产300| 你懂的视频在线观看| 国产日韩欧美成人| 韩日成人在线| 蜜桃传媒一区二区亚洲av| 欧美日韩国产高清一区| 牛牛电影国产一区二区| 欧美精品二区三区四区免费看视频 | 国产亚洲视频在线观看| 成人精品视频在线观看| 97超碰人人澡| 欧美韩日一区二区三区四区| av免费观看在线| 4438全国亚洲精品在线观看视频| 俺要去色综合狠狠| 中文字幕制服丝袜| 在线观看一区二区精品视频| 最新国产露脸在线观看| 欧美极品色图| 国产福利91精品一区| 国产寡妇亲子伦一区二区三区四区| 久久精品国产69国产精品亚洲 | 日韩电影中文字幕av| 丁香久久综合| 国产欧美日韩网站| 国产精品国产三级国产普通话蜜臀 | 国产成人综合亚洲网站| 久久久久久无码午夜精品直播| 丝袜情趣国产精品|