2014-01-10 11 views
0

我想知道創建CUSTOMER_RANDOM_VALUE(0到100之間)是否常見,以便處理隨機樣本而不是整個數據庫。處理樣本而不是整個數據庫

我們舉一個例子:管理Webstore的CDW並使用增量CustomerID。

如果你想知道誰訪問特定產品的頁面的用戶數的,你需要做的是:

SELECT COUNT(DISTINCT CUSTOMER_ID) 
FROM WEBSITE_TRAFFIC 
WHERE PRODUCT_KEY= 134 

問題是這樣的表是如此巨大,這可能需要1小時就知道這一點,你必須整天回答很多這類問題。

爲什麼不爲每個客戶創建一個random_value:

Customer_Id | Random Value 
1    13 
2    41 
3    8 
4    87 

和1%這樣的一個樣本工作:

SELECT COUNT(DISTINCT CUSTOMER_ID) 
FROM WEBSITE_TRAFFIC 
WHERE PRODUCT_KEY= 134 
AND CUSTOMER_RANDOM_VALUE<1 

問題:它是一個共同的初步實踐時數據量很大,要使用CUSTOMER_RANDOM_VALUE進行採樣。

+1

一個好的做法是擁有一個空的數據庫。然後,有可以發出一系列插入來加載示例數據的腳本。然後,任何開發人員都可以擁有自己的示例數據庫來處理他的代碼。 –

+0

我永遠不會做你正在考慮的事情。我會添加一個索引到我在where子句中使用的字段。另外,對於您的具體示例,我會在where子句中添加日期範圍。 –

回答

0

好的做法是使用正確的工具。大多數關係型數據庫在進行在線事務處理(OLTP)時都非常擅長,因爲它們的發展主要是爲了在上世紀80年代和90年代解決這個問題。像你提出的查詢是一種不同的類型,他們是分析查詢(OLAP)。要運行分析工作負載,有更好的工具。

Columnstores是更適合分析處理的工具的主要示例,而今天幾乎所有平臺都有列存儲引擎。

在內存引擎如SQL Server Analysis Services是另一種方法。

或者完全拋棄數據庫,只處理Hadoop中的Web日誌進行分析。

問題是,爲您的「產品」提供另一個OLAP系統用於分析洞察力的OLTP系統存在問題。當然,您可以設置一個ETL過程來保持OLAP系統的最新狀態,但並不容易。

它的要點在於,您有兩個相互矛盾的力量將系統撕裂:OLTP對服務頁面的要求與OLAP對您的分析的要求。你不會找到'一刀切'的答案,任何試圖解決這兩個問題的單一系統都將是一個妥協,這裏有基本面。

因此,短時間內,您可能獲得WEBSITE_TRAFFIC適當指數的一些里程。您可以進行一些預先聚合和分段,批量更新和一些延遲。但沒有銀彈,答案很簡單。

+0

感謝您的回答。 我根本不是技術人員,我不決定使用哪種工具。 我只是使用數據庫上傳數據並進行統計分析。 有時他們問我,我們的客戶中有哪些人這樣做,抽樣似乎是加速查詢的好方法,但似乎沒有人這樣做,所以對我來說這看起來是錯誤的做法。 – user3178882

相關問題