2016-09-15 35 views
-2

我開始使用數據庫,但我仍然是新手。有關大數據和SQL限制的建議

我面臨的問題涉及到銷售和訪問(最初)10萬家企業。我目前正在使用Microsoft SQL。

對於這些場所,我想陰謀年,月,周,日,產品,地區,建立銷售和訪問與過濾器的圖形,並且這些過濾器的任何其他可能的組合。我還需要將此數據與來自同一區域的其他機構的數據相關聯,其他所有數據都相同(其他過濾器)。

這兩個表格將從通常每年每個企業有100萬次交易的數據庫提供。這些數據將被簡化並插入到目標數據庫中。

作爲一個起點,我雖然對下面的模式爲每個表:

int EstablishmentId 
int RegionId 
int Year 
int Month 
int Week 
int Day 
int Hour 
decimal Value 

考慮到數據量,我認爲一個SQL服務器將無法在默認情況下處理它。我不是數據庫方面的專家,所以我追求解決方案,並且發現了分區,按年,月,周,日,產品,地區和建立(以及某些組合),但顯然SQL 2016可以處理多達15000個分區,因此它是不可能的。

我在這裏尋求意見,所以我可以照顧可能的解決方案並研究它們。我相信你比我更有見識,因此,通過向我展示更好的方法,可以指引我朝着正確的方向前進。

最後一個信息:我會有更多的表格。我只是提出最簡單的一個。這些表格將具有預處理的數據,但數量很大,可能有過濾器。

在此先感謝。

+0

你甚至知道什麼是大數據嗎?這裏有一個提示:這並不意味着你使用大量數據。 – xenapan

+2

您可以在手機上運行該數據庫... – jarlh

+0

您的SQL Server可以通過適當大小的硬件處理預期的卷。閱讀SQL服務器處理數十億行http://dba.stackexchange.com/questions/129223/total-billions-of-rows-and-daily-millions-of-row-insert-what-database-system-su –

回答

1

SQL Server可以處理的數據量的種類實際上取決於您運行的是哪種硬件。對於在高端硬件上運行的SQL Server,您所談論的內容完全可以達到理論閾值。

我覺得你想要做的分區可能會與你的桌子上適當的索引做什麼...我不認爲你真的瞭解使用功能分區。 「大數據」解決方案(我不知道您是否有意使用該術語,或者如果您只是在談論相對數量的記錄)可能適合您嘗試執行的操作,但明白這不會是一個新手只會打和利用的東西。在你的情況下你能做什麼取決於開發項目的開發者的背景和專業知識。

根據您所提供的信息很少,如果我要提出一個方向,你追求的理解我想指出你走向SQL Server Analysis Services

1

不要養成一種假設對於一個人來說似乎很大的數字對於計算機來說會很大的習慣。使用如下所示的簡單腳本來測試這些理論非常簡單。

您的示例表中的一行將佔用32個字節的數據+行開銷+索引。 如果我們將它近似爲每行100個字節,使用1M行,我們將獲得100MB。這不包括數據壓縮。

100MB很小的數據,而不是大數據。

SQL服務器能夠處理多少遠不止此,我會認爲這是適當考慮您想對數據做分析。

列存儲索引將是這種類型的表和這些類型的查詢再合適不過了。

在這個例子中我生成5M行並把一個簡單的列存儲索引在上面。 我的筆記本電腦上的所有測試查詢都會在1到3秒內完成。考慮到我沒有額外的索引,並且絕對沒有硬件或分區的調整,我認爲這足夠表現。

我的測試表中運行此腳本後佔用約24MB。

if object_id('table1') is not null drop table table1; 

create table table1(
    EstablishmentId int , 
    RegionId   int , 
    Year    int , 
    Month    int , 
    Week    int , 
    Day    int , 
    Hour    int , 
    Value   decimal 
    ) 
; 

insert into table1(
    EstablishmentId , 
    RegionId  , 
    Year   , 
    Month   , 
    Week   , 
    Day    , 
    Hour   , 
    Value) 

select n % 100, n % 10, n % 20, n % 12, n % 52, n % 256, n % 24, 55 * n 
from (
    SELECT TOP (5000000) 
     n = CONVERT(INT, ROW_NUMBER() OVER (ORDER BY s1.[object_id])) 
    FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2 
) data 
OPTION (MAXDOP 1); 

CREATE CLUSTERED COLUMNSTORE INDEX CCIX 
    ON table1; 


exec sp_spaceused 'table1' 

select sum(value) from table1 where year between 50 and 5000 
select sum(value), year from table1 group by year 
select sum(value), year, week from table1 where EstablishmentId = 55 group by year, week 

在SQL Server 2014 Developer Edition上測試。

編輯

如果你想使用這個挑戰的原因與「大數據工具」,然後繼續玩。這將是一次很好的學習經歷。