2016-09-15 36 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上测试。

编辑

如果你想使用这个挑战的原因与“大数据工具”,然后继续玩。这将是一次很好的学习经历。