Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
MSSQL ¡¤ ÌØÐÔ·ÖÎö ¡¤ Áд洢¼¼Êõ×öʵʱ·ÖÎö
 
  2346  次浏览      27
 2018-9-25  
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚÔÆÆÜÉçÇø,ÕâÆªÎÄÕÂÌÖÂÛÈçºÎÀûÓÃSQL Server 2016Áд洢¼¼Êõ×öʵʱÊý¾Ý·ÖÎö£¬½â¾ö´«Í³·ÖÎö·½·¨µÄÍ´µã¡£

Êý¾Ý·ÖÎöÖ¸µ¼ÉÌÒµÐÐΪµÄ¼ÛÖµÔ½À´Ô½¸ß£¬Ê¹µÃÓû§¶ÔÊý¾Ýʵʱ·ÖÎöµÄÒªÇó±äµÃÔ½À´Ô½¸ß¡£Ê¹Óô«Í³RDBMSÊý¾Ý·ÖÎö¼Ü¹¹£¬Óöµ½ÁËǰËùδÓеÄÌôÕ½£¬¸ßÑÓ³Ù¡¢Êý¾Ý´¦ÀíÁ÷³Ì¸´ÔӺͳɱ¾¹ý¸ß¡£

´«Í³RDBMSÊý¾Ý·ÖÎö

ÔÚ¹ýÈ¥ºÜ³¤Ò»¶Îʱ¼ä£¬ÆóÒµ¾ùÑ¡Ôñ´«Í³µÄ¹ØÏµÐÍÊý¾Ý¿â×öOLAPºÍData Warehouse¹¤×÷¡£ÕâÒ»½ÚÌÖÂÛ´«Í³RDBMSÊý¾Ý·ÖÎöµÄ½á¹¹ºÍÃæÁÙµÄÌôÕ½¡£

´«Í³RDBMS·ÖÎö¼Ü¹¹

´«Í³¹ØÏµÐÍÊý¾Ý¿â×öÊý¾Ý·ÖÎöµÄ¼Ü¹¹£¬°´ÕÕ¹¦ÄÜÄ£¿é¿ÉÒÔ»®·ÖΪÈý¸ö²¿·Ö£º

OLTPÄ£¿é£ºOLTPµÄÈ«³ÆÊÇOnline Transaction Processing£¬ËüÊÇÊý¾Ý²úÉúµÄÔ´Í·£¬¶ÔÊý¾ÝµÄÍêÕûÐÔºÍÒ»ÖÂÐÔÒªÇóºÜ¸ß;¶ÔÊý¾Ý¿âµÄ·´Ó¦Ê±¼ä(RT: Response Time)·Ç³£Ãô¸Ð;¾ßÓи߲¢·¢£¬¶àÊÂÎñ£¬¸ßÏìÓ¦µÈÌØµã¡£

ETLÄ£¿é£ºETLµÄÈ«³ÆÊÇExtract Transform Load¡£ËûÊÇ×öÊý¾ÝÇåÏ´¡¢×ª»¯ºÍ¼ÓÔØ¹¤×÷µÄ¡£¿ÉÒÔ½«ETLÀí½âΪÊý¾Ý´ÓOLTPµ½Data WarehouseµÄ¡°°áÔ˹¤¡±¡£ETL×î´óµÄÌØ¶¨ÊǾßÓÐÑÓʱÐÔ£¬ÎªÁË×î´óÏ޶ȼõС¶ÔOLTPµÄÓ°Ï죬һ°ã»áÉè¼Æ³É°´Ð¡Ê±£¬°´Ìì»òÕß°´ÖÜÀ´ÖÜÆÚÐÔÔË×÷¡£

OLAPÄ£¿é£ºOLAPµÄÈ«³ÆÊÇOnline Analytic Processing£¬ËüÊÇ»ùÓÚÊý¾Ý²Ö¿â(Data Warehouse)×öÊý¾Ý·ÖÎöºÍ±¨±í³ÊÏÖµÄÖն˲úÆ·¡£Êý¾Ý²Ö¿âµÄÌØµãÊÇ£ºÊý¾ÝÐÎ̬¹Ì¶¨£¬¼¸ºõ»òÕߺÜÉÙ·¢ÉúÊý¾Ý±ä¸ü£¬Í³¼Æ²éѯ·ÖÎö¶ÁÈ¡Êý¾ÝÁ¿´ó¡£

´«Í³µÄRDBMS·ÖÎöÄ£ÐÍͼ£¬ÈçÏÂͼչʾ(ͼƬֱ½Ó½ØÈ¡×Ô΢ÈíµÄÅàѵ²ÄÁÏ)£º

´ÓÕâ¸öͼ£¬ÎÒÃÇ¿ÉÒԷdz£ÇåÎúµÄ¿´µ½´«Í³RDBMS·ÖÎöÄ£Ð͵ÄÈý¸ö´óµÄ²¿·Ö£ºÔÚͼµÄ×î×ó±ßÊÇOLTPÒµÎñ³¡¾°£¬¸ºÔð²É¼¯ºÍ²úÉúÊý¾Ý;ͼµÄÖв¿ÊÇETLÈÎÎñ£¬¸ºÔð¡°°áÔË¡±Êý¾Ý;ͼµÄÓÒ±ßÊÇOLAPÒµÎñ³¡¾°£¬¸ºÔð·ÖÎöÊý¾Ý£¬È»ºó½«·ÖÎö½á¹û½»¸øBI±¨±íչʾ¸ø×îÖÕÓû§¡£ÆóҵʹÓÃÕâ¸ö´«Í³µÄ¼Ü¹¹³¤´ïÊýÄ꣬Óöµ½Á˲»ÉÙµÄÌôÕ½ºÍÀ§ÄÑ¡£

ÃæÁÙµÄÌôÕ½

É̳¡ÈçÕ½³¡£¬Õ½»úËæÏ¢Íò±ä£¬Êý¾Ý·ÖÎö½á¹ûÖ¸µ¼ÉÌÒµÐÐΪµÄ¼ÛÖµÔ½À´Ô½¸ß£¬Ê¹µÃÊý¾Ý·ÖÎö½á¹û±äµÃÔ½À´Ô½ÖØÒª£¬Óû§¶ÔÊý¾Ýʵʱ·ÖÎöµÄÒªÇó±äµÃÔ½À´Ô½¸ß¡£Ê¹Óô«Í³RDBMS·ÖÎö¼Ü¹¹£¬Óöµ½ÁËǰËùδÓеÄÌôÕ½£¬Ö÷ÒªµÄÍ´µã°üÀ¨£º

Êý¾ÝÑÓ³Ù´ó

Êý¾Ý´¦ÀíÁ÷³ÌÈß³¤¸´ÔÓ

³É±¾¹ý¸ß

Êý¾ÝÑÓ³Ù´ó£ºÎªÁ˼õÉÙ¶ÔOLTPÄ£¿éµÄÓ°Ï죬ETLÈÎÎñÍùÍù»áÑ¡ÔñÔÚÒµÎñµÍ·åÆÚÖÜÆÚÐÔÔË×÷£¬±ÈÈçÁ賿¡£Õâ¾Í»áµ¼ÖÂOLAP·ÖÎöµÄÊý¾ÝÔ´Data WarehouseÏà¶ÔÓÚOLTPÓÐÖÁÉÙÒ»ÌìµÄʱ¼ä²îÒì¡£Õâ¸öʱ¼ä²îÒì¶ÔÓÚijЩʵʱÐÔÒªÇóºÜ¸ßµÄÒµÎñÀ´Ëµ£¬ÊÇÎÞ·¨½ÓÊܵġ£±ÈÈç£ºÒøÐп¨µÁË¢µÄ¼ì²é·þÎñ£¬ÊÇÐèÒª×öµ½Ãë¼¶±ð֪ͨ³Ö¿¨È˵ġ£ÊÔÏëÏ£¬Èç¹ûÄãµÄÒøÐп¨±»µÁË¢£¬Ò»ÌìÒÔºó²ÅÊÕµ½ÒøÐз¢¹ýÀ´µÄ¶ÌÐÅÌáÐÑ£¬»áÊǶàôÔã¸âµÄÌåÑé¡£

Êý¾Ý´¦ÀíÁ÷³ÌÈß³¤¸´ÔÓ£ºÊý¾ÝÊÇͨ¹ýETLÈÎÎñÀ´³éÈ¡¡¢ÇåÏ´ºÍ¼ÓÔØµ½Data WarehouseÖеġ£ÎªÁ˱£Ö¤Êý¾Ý·ÖÎö½á¹ûµÄÕýÈ·ÐÔ£¬ETL»¹±ØÐëÒª½â¾öһϵÁеÄÎÊÌâ¡£±ÈÈ磺OLTP±ä¸üÊý¾ÝµÄ²¶»ñ£¬²¢Í¬²½µ½Data Warehouse;ÖÜÆÚÐԵĽøÐÐÊý¾ÝÈ«Á¿ºÍÔöÁ¿¸üÐÂÀ´È·±£OLTPºÍData WarehouseÖÐÊý¾ÝµÄÒ»ÖÂÐÔ¡£Õû¸öÊý¾ÝÁ÷Èß³¤£¬ÊµÏÖÂß¼­Òì³£¸´ÔÓ¡£

³É±¾¹ý¸ß£ºÎªÁËʵÏÖ´«Í³µÄRDBMSÊý¾Ý·ÖÎö¹¦ÄÜ£¬±ØÐëÐÂÔöData Warehouse½ÇÉ«À´±£´æËùÓеÄOLTPÊý¾ÝÈßÓ࣬רÃÅÌṩ·ÖÎö·þÎñ¹¦ÄÜ¡£ÕâÊÆ±Ø»á¼Ó´óÁËÓ²¼þ¡¢Èí¼þºÍά»¤³É±¾Í¶Èë;ËæÖ®»¹»áµ½À´ETLÈÎÎñ×öÊý¾Ýץȡ¡¢ÇåÏ´¡¢×ª»»ºÍ¼ÓÔØµÄ¿ª·¢³É±¾ºÍʱ¼ä³É±¾Í¶Èë¡£

ÄÇô£¬SQL ServerÓÐûÓÐÒ»ÖÖ¼¼Êõ¼ÈÄܽâ¾öÒÔÉÏËùÓÐÍ´µãµÄ·½·¨£¬ÓÖÄÜʵÏÖÊý¾Ýʵʱ·ÖÎöÄØ?µ±È»ÓУ¬ÄǾÍÊÇSQL Server 2016Áд洢¼¼Êõ¡£

SQL Server 2016Áд洢¼¼Êõ×öʵʱ·ÖÎö

ΪÁ˽â¾öOLAP³¡¾°µÄ²éѯ·ÖÎö£¬Î¢Èí´ÓSQL Server 2012¿ªÊ¼ÒýÈëÁд洢¼¼Êõ£¬´ó´óÌá¸ßÁËOLAP²éѯµÄÐÔÄÜ;SQL Server 2014½â¾öÁËÁд洢±íÖ»¶ÁµÄÎÊÌ⣬ʹÓó¡¾°´ó´óÍØ¿í;¶øSQL Server 2016µÄÁд洢¼¼Êõ³¹µ×½â¾öÁËʵʱÊý¾Ý·ÖÎöµÄÒµÎñ³¡¾°¡£Óû§Ö»ÐèÒª×ö·Ç³£Ð¡¹æÄ£µÄÐ޸쬱ã¿ÉÒÔ¿ÉÒԷdz£Æ½»¬µÄʹÓÃSQL Server 2016µÄÁд洢¼¼ÊõÀ´½â¾öʵʱÊý¾Ý·ÖÎöµÄÒµÎñ³¡¾°¡£ÕâÒ»½ÚÌÖÂÛÒÔϼ¸¸ö·½Ã棺

SQL Server 2016Êý¾Ý·ÖÎö¼Ü¹¹

Disk-based Tables with Nonclustered Columnstore Index

Memory-based Tables with Columnstore Index

Minimizing impacts of OLTP

SQL Server 2016Êý¾Ý·ÖÎö¼Ü¹¹

SQL Server 2016Êý¾Ý·ÖÎö¼Ü¹¹Ïà¶ÔÓÚ´«Í³µÄRDBMSÊý¾Ý·ÖÎö¼Ü¹¹ÓÐÁ˷dz£´óµÄ¸Ä½ø£¬±äµÃ¸ü¼Ó¼òµ¥¡£¾ßÌåÌåÏÖÔÚOLAPÖ±½Ó½ÓÈëOLTPÊý¾ÝÔ´£¬Èç´Ë¾ÍÎÞÐèData Warehouse½ÇÉ«ºÍETLÈÎÎñÕâ¸ö¡°°áÔ˹¤¡±ÁË¡£

OLAPÖ±½Ó½ÓÈëOLTPÊý¾ÝÔ´£ºÈÃOLAP±¨±íÊý¾ÝÔ´Ö±½Ó½ÓÈëOLTPµÄÊý¾ÝÔ´Í·ÉÏ¡£SQL Server»á×Ô¶¯Ñ¡ÔñºÏÊʵÄÁд洢Ë÷ÒýÀ´Ìá¸ßÊý¾Ý·ÖÎö²éѯµÄÐÔÄÜ£¬ÊµÏÖʵʱÊý¾Ý·ÖÎöµÄ³¡¾°¡£

²»ÔÙÐèÒªETLÈÎÎñ£ºÓÉÓÚOLAPÊý¾ÝÔ´Ö±½Ó½ÓÈëOLTPµÄÊý¾Ý£¬Ã»ÓÐÁËData Warehouse½ÇÉ«£¬ËùÒÔ²»ÔÙÐèÒªETLÈÎÎñ£¬´Ó¶ø´ó´ó¼ò»¯ÁËÊý¾Ý´¦ÀíÁ÷³ÌÖеĸ÷»·½Ú£¬Ã»ÓÐÁËÏàÓ¦µÄ¿ª·¢Î¬»¤ºÍʱ¼ä³É±¾¡£

SQL Server 2016ʵʱ·ÖÎö¼Ü¹¹Í¼£¬Õ¹Ê¾ÈçÏÂ(ͼƬÀ´×Ô΢ÈíÅàѵ½Ì³Ì)£º

SQL Server 2016Ö®ËùÒÔÄܹ»ÊµÏÖÈç´Ë¼ò»¯µÄʵʱ·ÖÎö£¬µ×ÆøÊÇÀ´Ô´ÓÚSQL Server 2016µÄÁд洢¼¼Êõ£¬ÎÒÃÇ¿ÉÒÔ½¨Á¢»ùÓÚ´ÅÅÌ´æ´¢»òÕß»ùÓÚÄÚ´æ´æ´¢µÄÁд洢±íÀ´½øÐÐʵʱÊý¾Ý·ÖÎö¡£

Disk-based Tables with Nonclustered Columnstore Index

ʹÓÃSQL Server 2016Áд洢Ë÷ÒýʵÏÖʵʱ·ÖÎöµÄµÚÒ»ÖÖ·½·¨ÊÇΪ±í½¨Á¢·Ç¾Û¼¯Áд洢Ë÷Òý¡£ÔÚSQL Server 2012°æ±¾ÖУ¬½öÖ§³Ö·Ç¾Û¼¯Áд洢Ë÷Òý£¬²¢ÇÒ±í»á³ÉΪֻ¶Á£¬¶øÎÞ·¨¸üÐÂ;ÔÚSQL Server 2014°æ±¾ÖУ¬Ö§³Ö¾Û¼¯Áд洢Ë÷Òý±í£¬ÇÒÊý¾Ý¿É¸üÐÂ;µ«ÊǷǾۼ¯Áд洢Ë÷Òý±í»¹ÊÇÖ»¶Á;¶øÔÚSQL Server 2016ÖУ¬Íêȫ֧³Ö·Ç¾Û¼¯Áд洢Ë÷ÒýºÍ¾Û¼¯Áд洢Ë÷Òý£¬²¢ÇÒ±í¿É¸üС£ËùÒÔ£¬ÔÚSQL Server 2016°æ±¾ÖУ¬ÎÒÃÇÍêÈ«¿ÉÒÔ½¨Á¢·Ç¾Û¼¯Áд洢Ë÷ÒýÀ´ÊµÏÖOLAPµÄ²éѯ³¡¾°¡£´´½¨·½·¨Ê¾ÀýÈçÏ£º

DROP TABLE IF EXISTS dbo.SalesOrder;
GO
CREATE TABLE dbo.SalesOrder
(
OrderID BIGINT IDENTITY(1,1) NOT NULL
,AutoID INT NOT NULL
,UserID INT NOT NULL
,OrderQty INT NOT NULL
,Price DECIMAL(8,2) NOT NULL
,OrderDate DATETIME NOT NULL
,OrderStatus SMALLINT NOT NULL
CONSTRAINT PK_SalesOrder PRIMARY KEY NONCLUSTERED (OrderID)
) ;
GO

--Create the columnstore index with a filtered condition
CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI_SalesOrder
ON dbo.SalesOrder (OrderID, AutoID, UserID, OrderQty, Price, OrderDate, OrderStatus)
;
GO

ÔÚÕâ¸öʵÀýÖУ¬ÎÒÃÇ´´½¨ÁËSalesOrder±í£¬²¢ÇÒΪ¸Ã±í´´½¨Á˷Ǿۼ¯Áд洢Ë÷Òý£¬µ±½øÐÐOLAP²éѯ·ÖÎöµÄʱºò£¬SQL Server»áÖ±½Ó´Ó¸ÃÁд洢Ë÷ÒýÖжÁÈ¡Êý¾Ý¡£

Memory-based Tables with Columnstore Index

SQL Server 2014°æ±¾ÒýÈëÁËIn-Memory OLTP£¬ÓÖ»òÕß½Ð×ÅHekaton£¬ÖÐÎijÆÖ®ÎªÄÚ´æÓÅ»¯±í£¬ÄÚ´æÓÅ»¯±íÍêÈ«ÊÇLock Free¡¢Latch FreeµÄ£¬¿ÉÒÔ×î´óÏ޶ȵÄÔö¼Ó²¢·¢ºÍÌá¸ßÏìӦʱ¼ä¡£¶øÔÚSQL Server 2016ÖУ¬Èç¹ûÄãµÄ·þÎñÆ÷ÄÚ´æ×ã¹»´óµÄ»°£¬ÎÒÃÇÍêÈ«¿ÉÒÔ½¨Á¢»ùÓÚÄÚ´æÓÅ»¯±íµÄÁд洢Ë÷Òý£¬ÕâÑùµÄ±íÊý¾Ý»á°´Áд洢ÔÚÄÚ´æÖУ¬³ä·ÖÀûÓÃÁ½ÕßµÄÓÅÊÆ£¬×î´ó³Ì¶ÈµÄÌá¸ß²éѯ²éѯЧÂÊ£¬½µµÍÊý¾Ý¿âÏìӦʱ¼ä¡£´´½¨·½·¨ÊµÀýÈçÏ£º

DROP TABLE IF EXISTS dbo.SalesOrder;
GO
CREATE TABLE dbo.SalesOrder
(
OrderID BIGINT IDENTITY(1,1) NOT NULL
,AutoID INT NOT NULL
,UserID INT NOT NULL
,OrderQty INT NOT NULL
,Price DECIMAL(8,2) NOT NULL
,OrderDate DATETIME NOT NULL
,OrderStatus SMALLINT NOT NULL
CONSTRAINT PK_SalesOrder PRIMARY KEY NONCLUSTERED HASH (OrderID) WITH (BUCKET_COUNT = 10000000)
) WITH(MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA) ;
GO

ALTER TABLE dbo.SalesOrder
ADD INDEX CCSI_SalesOrder CLUSTERED COLUMNSTORE
;
GO

ÔÚÕâ¸öʵÀýÖУ¬ÎÒÃÇ´´½¨ÁË»ùÓÚÄÚ´æµÄÓÅ»¯±íSalesOrder£¬³Ö¾Ã»¯·½°¸Îª±í½á¹¹ºÍÊý¾Ý;È»ºóÔÚÕâ¸öÄÚ´æ±íÉϽ¨Á¢¾Û¼¯Áд洢Ë÷Òý¡£µ±OLAP²éѯ·ÖÎöÖ´ÐеÄʱºò£¬SQL Server¿ÉÒÔÖ±½Ó´Ó»ùÓÚÄÚ´æµÄÁд洢Ë÷ÒýÖлñÈ¡Êý¾Ý£¬´ó´óÌá¸ß²éѯ·ÖÎöµÄÄÜÁ¦¡£

Minimizing impacts of OLTP

¿¼Âǵ½OLTPÊý¾ÝÔ´µÄ¸ß²¢·¢£¬µÍÑÓ³ÙÒªÇóµÄÌØÐÔ£¬ÔÚijЩ·Ç³£¸ß²¢·¢ÊÂÎñ³¡¾°ÖУ¬ÎÒÃÇ¿ÉÒÔ²ÉÓÃÒÔÏ·½·¨×î´óÏ޶ȼõÉÙ¶ÔOLTPµÄÓ°Ï죺

Filtered NCCI + Clustered B-Tree Index

Compress Delay

Offloading OLAP to AlwaysOn Readable Secondary

Filtered NCCI + Clustered B-Tree Index

´ø¹ýÂËÌõ¼þµÄË÷ÒýÔÚSQL Server²úÆ·Öв¢²»ÊÇʲôȫеĸÅÄÔÚSQL Server 2008¼°ÒÔºóµÄ²úÆ·°æ±¾ÖУ¬¾ùÖ§³Ö´´½¨¹ýÂËË÷Òý£¬ÕâÏî¼¼ÊõÔÊÐíÓû§´´½¨´æÔÚ¹ýÂËÌõ¼þµÄË÷Òý£¬ÒÔ¼ÓËÙÌØ¶¨Ìõ¼þµÄ²éѯÓï¾äʹÓùýÂËË÷Òý¡£¶øÔÚSQL Server 2016ÖÐÖ§³Ö´æÔÚ¹ýÂËÌõ¼þµÄÁд洢Ë÷Òý£¬ÎÒÃÇ¿ÉÒÔʹÓÃÕâÏî¼¼ÊõÀ´Çø·ÖÊý¾ÝµÄÀäÈȳ̶È(Êý¾ÝÀäÈȳ̶ÈÊÇÖ¸Êý¾ÝµÄÐÞ¸ÄÆµÂÊ;ÀäÊý¾ÝÊÇÖ¸¼¸ºõ»òÕߺÜÉÙ±»Ð޸ĵÄÊý¾Ý;ÈÈÊý¾ÝÊÇÖ¸¾­³£»á±»Ð޸ĵÄÊý¾Ý¡£±ÈÈçÔÚ¶©µ¥³¡¾°ÖУ¬¶©µ¥´ÓÉú³É״̬µ½¿Í»§ÊÕµ½»õÎïÖ®¼äµÄ״̬£¬»á±»¾­³£¸üУ¬ÊôÓÚÈÈÊý¾Ý;¶ø¿ÍÈËÒ»µ©ÊÕµ½»õÎ¶©µ¥ÐÅÏ¢¼¸ºõ²»»á±»ÐÞ¸ÄÁË£¬¾ÍÊôÓÚÀäÊý¾Ý)¡£ÀûÓùýÂËÁд洢Ë÷ÒýÀ´Çø·ÖÀäÈÈÊý¾ÝµÄ¼¼Êõ£¬ÊÇʹÓþۼ¯B-TreeË÷ÒýÀ´´æ·ÅÈÈÊý¾Ý£¬Ê¹ÓùýÂ˷Ǿۼ¯Áд洢Ë÷ÒýÀ´´æ·ÅÀäÊý¾Ý£¬ÕâÑùSQL Server 2016µÄÓÅ»¯Æ÷¿ÉÒԷdz£ÖÇÄܵĴӷǾۼ¯Áд洢Ë÷ÒýÖлñÈ¡ÀäÊý¾Ý£¬´Ó¾Û¼¯B-TreeË÷ÒýÖлñÈ¡ÈÈÊý¾Ý£¬ÕâÑùʹµÃOLAP²Ù×÷ÓëOLTPÊÂÎñ²Ù×÷Âß¼­¸ôÀ뿪À´£¬×îÖÕOLAP×î´óÏ޶ȵļõÉÙ¶ÔOLTPµÄÓ°Ïì¡£

ÏÂͼֱ¹ÛµÄ±íʾÁËFiltered NCCI + Clustered B-Tree IndexµÄ½á¹¹Í¼(ͼƬÀ´×Ô΢ÈíÅàѵ½Ì³Ì)£º

ʵÏÖ·½·¨²Î¼ûÒÔÏ´úÂ룺

-- create demo table SalesOrder
DROP TABLE IF EXISTS dbo.SalesOrder;
GO
CREATE TABLE dbo.SalesOrder
(
OrderID BIGINT IDENTITY(1,1) NOT NULL
,AutoID INT NOT NULL
,UserID INT NOT NULL
,OrderQty INT NOT NULL
,Price DECIMAL(8,2) NOT NULL
,OrderDate DATETIME NOT NULL
,OrderStatus SMALLINT NOT NULL
CONSTRAINT PK_SalesOrder PRIMARY KEY NONCLUSTERED (OrderID)
) ;
GO
/*
¡ª OrderStatus Description
¡ª 0 => ¡®Placed¡¯
¡ª 1 => ¡®Closed¡¯
¡ª 2 => ¡®Paid¡¯
¡ª 3 => ¡®Pending¡¯
¡ª 4 => ¡®Shipped¡¯
¡ª 5 => ¡®Received¡¯
*/

CREATE CLUSTERED INDEX CI_SalesOrder
ON dbo.SalesOrder(OrderStatus)
;
GO

--Create the columnstore index with a filtered condition
CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI_SalesOrder
ON dbo.SalesOrder (AutoID, Price, OrderQty, orderstatus)
WHERE orderstatus = 5
;
GO

ÔÚÕâ¸öʵÀýÖУ¬ÎÒÃÇ´´½¨ÁËSalesOrder±í£¬²¢ÔÚOrderStatus×Ö¶ÎÉϽ¨Á¢ÁËClustered B-Tree½á¹¹µÄË÷ÒýCI_SalesOrder£¬È»ºóÔÙ½¨Á¢ÁË´ø¹ýÂËÌõ¼þµÄ·Ç¾Û¼¯Áд洢Ë÷ÒýNCCI_SalesOrder¡£µ±¿ÍÈË»¹Î´ÊÕµ½»õÎïµÄ¶©µ¥£¬»á´¦ÓÚÇ°ÃæÎåÖÐ״̬£¬ÊôÓÚÐèÒª¾­³£¸üеÄÈÈÊý¾Ý£¬SQL Server²éѯ»á¸ù¾ÝClustered B-TreeË÷ÒýCI_SalesOrderÀ´²éѯÊý¾Ý;¿ÍÈËÒѾ­ÊÕ»õµÄ¶©µ¥£¬´¦ÓÚµÚÁùÖÖ״̬£¬ÊôÓÚÀäÊý¾Ý£¬SQL Server²éѯÀäÊý¾Ý»áÖ±½Ó´Ó·Ç¾Û¼¯Áд洢Ë÷ÒýÖлñÈ¡Êý¾Ý¡£´Ó¶ø×î´óÏ޶ȼõÉÙ¶ÔOLTPÓ°ÏìµÄͬʱ£¬Ìá¸ß²éѯЧÂÊ¡£

Compress Delay

Èç¹û°´ÕÕÒµÎñÂß¼­²ãÃæºÜÄÑÃ÷È·»®·Ö³öÊý¾ÝµÄÀäÈȳ̶ȣ¬Ò²¾ÍÊÇ˵ºÜÄÑ´Ó¹ýÂËÌõ¼þÀ´Âß¼­Çø·ÖÊý¾ÝµÄÀäÈÈ¡£ÕâÖÖÇé¿öÏ£¬ÎÒÃÇ¿ÉÒÔʹÓÃÑÓ³ÙѹËõ(Compress Delay)¼¼Êõ´Óʱ¼ä²ãÃæÀ´Çø·ÖÀäÈÈÊý¾Ý¡£±ÈÈ磺ÎÒÃǶ¨Ò峬¹ý60·ÖÖÓµÄÊý¾ÝΪÀäÊý¾Ý£¬60·ÖÖÓÒÔÄÚµÄÊý¾ÝΪÈÈÊý¾Ý£¬ÄÇôÎÒÃÇ¿ÉÒÔÔÚ´´½¨Áд洢Ë÷ÒýµÄʱºòÌí¼ÓWITHÑ¡ÏîCOMPRESSION_DELAY = 60 Minutes¡£µ±Êý¾Ý²úÉú³¬¹ý60·ÖÖÓÒÔºó£¬Êý¾Ý»á±»Ñ¹Ëõ´æ·Åµ½Áд洢Ë÷ÒýÖÐ(ÀäÊý¾Ý)£¬60·ÖÖÓÒÔÄÚµÄÊý¾Ý»áפÁôÔÚDelta StoreµÄB-Tree½á¹¹ÖУ¬ÕâÖÖÑÓ³ÙѹËõµÄ¼¼Êõ²»µ«Äܹ»´ïµ½¸ôÀëOLAP¶ÔOLTP×÷Ó㬻¹ÄÜ×î´óÏ޶ȵļõÉÙÁд洢Ë÷ÒýË鯬µÄ²úÉú¡£

ʵÏÖ·½·¨²Î¼ûÒÔÏÂÀý×Ó£º

-- create demo table SalesOrder
DROP TABLE IF EXISTS dbo.SalesOrder;
GO
CREATE TABLE dbo.SalesOrder
(
OrderID BIGINT IDENTITY(1,1) NOT NULL
,AutoID INT NOT NULL
,UserID INT NOT NULL
,OrderQty INT NOT NULL
,Price DECIMAL(8,2) NOT NULL
,OrderDate DATETIME NOT NULL
,OrderStatus SMALLINT NOT NULL
CONSTRAINT PK_SalesOrder PRIMARY KEY NONCLUSTERED (OrderID)
) ;
GO

--Create the columnstore index with a filtered condition
CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI_SalesOrder
ON dbo.SalesOrder (AutoID, Price, OrderQty, orderstatus)
WITH(COMPRESSION_DELAY = 60 MINUTES)
;
GO

SELECT name
,type_desc
,compression_delay
FROM sys.indexes
WHERE object_id = object_id('SalesOrder')
AND name = 'NCCI_SalesOrder'
;

¼ì²éË÷ÒýÐÅÏ¢½ØÍ¼ÈçÏ£º

Offloading OLAP to AlwaysOn Readable Secondary

ÁíÍâÒ»ÖÖ¼õÉÙOLAP¶ÔOLTPÓ°ÏìµÄ·½·¨ÊÇÀûÓÃAlwaysOnÖ»¶Á¸±±¾£¬ÕâÖÖÇé¿ö£¬¿ÉÒÔ½«OLAPÊý¾ÝÔ´´ÓOLTP°þÀë³öÀ´£¬½ÓÈëµ½AlwaysOnµÄÖ»¶Á¸±±¾ÉÏ¡£AlwaysOnµÄÖ÷¸±±¾¸ºÔðÊÂÎñ´¦Àí£¬Ö»¶Á¸±±¾¿ÉÒÔ×÷ΪOLAPµÄÊý¾Ý·ÖÎöÔ´£¬ÕâÑùʵÏÖÁËOLAPÓëOLTPµÄÎïÀí¸ôÀ룬½«Ó°Ïì¼õµ½×îµÍ¡£¼Ü¹¹Í¼ÈçÏÂËùʾ(ͼƬÀ´×Ô΢ÈíÅàѵ½Ì³Ì)£º

Ò»¸öʵ¼ÊÀý×Ó

ÔÚ¶©µ¥ÏµÍ³³¡¾°ÖУ¬Óû§ÊÕµ½»õÎï¹ý³Ì£¬Ã¿¸ö¶©µ¥»á¾­Àú6ÖÐ״̬£¬¼ÙÉèΪPlaced¡¢Canceled¡¢Paid¡¢Pending¡¢ShippedºÍReceived¡£ÔÚÇ°Ãæ5ÖÐ״̬µÄ¶©µ¥£¬»á±»¾­³£Ð޸쬱ÈÈ磺´ò°ü¶©µ¥£¬³ö¿â£¬¸üпìµÝÐÅÏ¢µÈ£¬Õⲿ·Ö¾­³£±»Ð޸ĵÄÊý¾Ý³ÆÎªÈÈÊý¾Ý;¶ø¶©µ¥Ò»µ©±»¿ÍÈ˽ÓÊÜÒԺ󣬶©µ¥Êý¾Ý¾Í¼¸ºõ²»»á±»Ð޸ģ¬Õⲿ·ÖÊý¾Ý³ÆÎªÀäÊý¾Ý¡£Õâ¸öÀý×Ó¾ÍÊÇʹÓÃSQL Server 2016 Filtered NCCI + Clustered B-TreeË÷ÒýµÄ·½Ê½À´Âß¼­»®·Ö³öÊý¾ÝµÄÀäÈȳ̶ȣ¬SQL ServerÔÚ²éѯ¹ý³ÌÖУ¬»á´Ó·Ç¾Û¼¯Áд洢Ë÷ÒýÖÐÈ¡ÀäÊý¾Ý£¬´ÓB-TreeË÷ÒýÖÐÈ¡ÈÈÊý¾Ý£¬×î´óÏÞ¶ÈÌá¸ßOLAP²éѯЧÂÊ£¬¼õÉÙ¶ÔOLTPµÄÓ°Ïì¡£

¾ßÌ彨±í´úÂëʵÏÖÈçÏ£º

-- create demo table SalesOrder
DROP TABLE IF EXISTS dbo.SalesOrder;
GO
CREATE TABLE dbo.SalesOrder
(
OrderID BIGINT IDENTITY(1,1) NOT NULL
,AutoID INT NOT NULL
,UserID INT NOT NULL
,OrderQty INT NOT NULL
,Price DECIMAL(8,2) NOT NULL
,OrderDate DATETIME NOT NULL
,OrderStatus SMALLINT NOT NULL
CONSTRAINT PK_SalesOrder PRIMARY KEY NONCLUSTERED (OrderID)
) ;
GO
/*
¡ª OrderStatus Description
¡ª 0 => ¡®Placed¡¯
¡ª 1 => ¡®Closed¡¯
¡ª 2 => ¡®Paid¡¯
¡ª 3 => ¡®Pending¡¯
¡ª 4 => ¡®Shipped¡¯
¡ª 5 => ¡®Received¡¯
*/

CREATE CLUSTERED INDEX CI_SalesOrder
ON dbo.SalesOrder(OrderStatus)
;
GO

--Create the columnstore index with a filtered condition
CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI_SalesOrder
ON dbo.SalesOrder (AutoID, Price, OrderQty, orderstatus)
WHERE orderstatus = 5
;
GO

ΪÁËÄܹ»Ö±¹ÛµÄ¿´µ½ÀûÓÃSQL Server 2016Áд洢Ë÷ÒýʵÏÖʵʱ·ÖÎöµÄЧ¹û£¬ÎÒÐéÄâÁËÒ»¸öÍøÂçÆû³µÏúÊÛ¶©µ¥ÏµÍ³£¬Ê¹ÓÃNodeJs + SQL Server 2016 Columnstore Index + Socket.IOÀ´ÊµÏÖʵʱ¶©µ¥ÏúÁ¿ºÍÏúÊÛÊÕÈëµÄ·ÖÎöÒ³Ãæ¡£

×ܽá

ÕâÆªÎÄÕ½²½âÀûÓÃSQL Server 2016Áд洢Ë÷Òý¼¼ÊõʵÏÖÊý¾Ýʵʱ·ÖÎöµÄÁ½ÖÖ·½·¨£¬ÒÔ½â¾ö´«Í³RDBMSÊý¾Ý·ÖÎöµÄ¸ßÑÓ³Ù¡¢¸ß³É±¾µÄÍ´µã¡£µÚÒ»ÖÖ·½·¨ÊÇHekaton + Clustered Columnstore Index;µÚ¶þÖÖ·½·¨ÊÇFiltered Nonclustered Columnstore Index + Clustered B-Tree¡£±¾ÎIJ¢ÒÔ´ËÀíÂÛΪ»ù´¡£¬Õ¹Ê¾ÁËÒ»¸öÍøÂçÆû³µÔÚÏßÏúÊÛϵͳµÄʵʱ¶©µ¥·ÖÎöÒ³Ãæ¡£

   
2346 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ