In memory database là gì

In-Memory Online Transaction Processing (OLTP), nói một cách khác là Hekaton tốt In-Memory Optimization, là phiên bạn dạng tiên tiến nhất của công nghệ cách xử lý tài liệu bên trên bộ lưu trữ của Microsoft nhằm mục tiêu buổi tối ưu hóa vận tốc tầm nã xuất, được tích phù hợp trong Squốc lộ Server’s Database Engine và được sử dụng hoàn toàn giống hệt như các nguyên tố của Database truyền thống lịch sử.

Bạn đang xem: In memory database là gì

In-Memory OLTP được xuất bạn dạng vào Squốc lộ Server năm trước nhưng mà còn rất nhiều thiếu sót nlỗi chẳng thể cần sử dụng được lệnh ALTER TABLE cùng được hoàn thành xong trong Squốc lộ Server 2016. Kiến trúc của chính nó bao gồm:

Các bảng tối ưu hóa bởi bộ lưu trữ Memory-Optimized TablesCác giấy tờ thủ tục biên dịch thoải mái và tự nhiên Natively-Compiled Stored ProceduresHash index với range index

1. Memory-Optimized Tables là những bảng được tạo nên bằng lệnh CREATE TABLE, trọn vẹn định hình với bền chắc nlỗi các table trên ổ cứng truyền thống.

*
Dữ liệu của Memory-Optimized tables được lưu trữ bộ nhớ lưu trữ RAM. Các record vào bảng được gọi cùng ghi vào bộ lưu trữ, một bạn dạng copy dữ liệu của bảng sẽ tiến hành bảo quản vào ổ cứng thật để bình an dữ liệu. Dữ liệu vào bảng memory chỉ được đọc lại trường đoản cú bảng trên ổ cứng trong quy trình recovery, ví như Khi restart VPS.

Memory-Optimized Tables sao lưu giữ dữ liệu vào phiên bản bên trên ổ cứng bằng nguyên tắc transaction delayed. Các chuyển đổi tài liệu sẽ tiến hành lưu giữ vào ổ cứng ngay khi thanh toán giao dịch được cách xử trí hoàn tất và đã trả công dụng lại cho những người dùng. Cho đề nghị thay đổi lại cho bài toán tăng đáng kể performance, những transaction sẽ commit mà lại không kịp lưu vào tô sẽ ảnh hưởng mất nếu như VPS bị down xuất xắc treo ngay trong khi đó.

Memory-Optimized Tables có 2 dạng:

Durable (DURABILITY=SCHEMA_AND_DATA): nghỉ ngơi dạng mang định, vừa lưu lại data vào bảng bên trên bộ lưu trữ, vừa lưu giữ data vào bảng trên ổ cứng.Ví dụ: Bảng "Product" được tạo nên như sau:

CREATE TABLE . ( ID INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000), Code VARCHAR(10) NOT NULL, Description VARCHAR(200) NOT NULL, Price FLOAT NOT NULL ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);GONon-durable (DURABILITY=SCHEMA_ONLY): chỉ giữ dữ liệu trên bộ nhớ lưu trữ nhưng ko gìn giữ vào ổ cứng. Các table dạng này thường chỉ dùng lưu giữ dữ liệu tạm thời nhỏng các bảng làm trung gian. Những bảng này không yêu cầu thực hiện ổ cứng, cùng dữ liệu không được hồi sinh nếu như server down.Ví dụ: Giống Durable cơ mà ở trong tính DURABILITY vẫn là SCHEMA_ONLYCREATE TABLE . ( ID INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000), Code VARCHAR(10) COLLATE Latinl_General_100_BIN2 NOT NULL, Description VARCHAR(200) NOT NULL, Price FLOAT NOT NULL ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY);GOMemory-Optimized Tables được sử dụng hệt như bảng truyền thống mang đến cùng những hoạt động develop, thực thi, gia hạn. Một database có thể đựng cả bảng ảo và bảng thật phổ biến với nhau.

Dữ liệu trong các bảng MO được tróc nã xuất theo 2 cách:

Qua những lệnh Transact-Squốc lộ truyền thống cuội nguồn.Bằng những Natively-Compiled Stored Procedures

Để tạo ra một database thực hiện In-Memory OLTPhường., đề nghị triển khai những bước:

Tạo một memory-optimized data filegroup cùng gán mặt đường dẫn vào file group.Tạo các bảng memory-optimized tables với những indexes.

CREATE DATABASE imoltp;GO ALTER DATABASE imoltp ADD FILEGROUPhường CONTAINS MEMORY_OPTIMIZED_DATA; ALTER DATABASE imoltp Địa Chỉ FILE (name = , filename="c:dataimoltp_dir") TO FILEGROUP. imoltp_mod; GO USE imoltp GO CREATE TABLE .

Xem thêm: Tam Quốc Diễn Nghĩa: Vì Sao Đề Cao Lưu Bị, Hạ Thấp Tào Tháo Là Người Như Thế Nào

( ID INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000), Code VARCHAR(10) COLLATE Latinl_General_100_BIN2 NOT NULL, Description VARCHAR(200) NOT NULL, Price FLOAT NOT NULL ) WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_AND_DATA)2. Các giấy tờ thủ tục biên dịch thoải mái và tự nhiên Natively-Compiled Stored ProceduresNatively-Compiled Stored Procedures chỉ có thể được sử dụng nhằm giải pháp xử lý memory-optimized tables, cũng tương tự những cấu trúc T-SQL khác được cung ứng như những truy vấn phụ, các hàm bởi vì người tiêu dùng xác định vô hướng, những hàm toán thù học tích phù hợp, vv. Code được thực thi cơ mà ko nên thêm ngẫu nhiên trình biên dịch tốt thông dịch gì nữa.

Dựa bên trên các ví dụ trước, ví dụ sau đây đang khái niệm về natively-compiled stored procedures update cột "Pirce" memory-optimized table “Product”.

CREATE PROCEDURE . WITH NATIVE_CCMPILATION, SCHEMABINDING, EXECUTE AS OWNERAS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N"us_english" ) UPDATE dbo.Product SET Price = Price - ( Price * 0.10 );END;Bên cạnh đó tất cả một vài điểm cần chú ý trong khái niệm ở bên trên của natively-compiled stored procedures là:

Mệnh đề WITH NATIVE_COMPILATION được sử dụngMệnh đề SCHMABINDING là đề nghị chính vì nó giới hạn các thủ tục tàng trữ vào schema của những đối tượng nhưng mà nó tđê mê chiếuMệnh đề BEGIN_ATOMIC là phải bởi vì thủ tục lưu trữ cần bao gồm đúng đắn một khối với transaction Isolation cấp độ.

3. Hash index In-Memory OLTP TablesHash index là một trong những giải pháp lý tưởng phát minh nhằm tăng speed truy vấn vấn, sử dụng rất tốt cho các tróc nã vấn gồm mệnh đề WHERE chỉ tới một quý giá đúng mực của cột được tấn công index. Và nó tất cả cấu trúc nlỗi sau:

*
Hash indexes có thể được tạo nên trong lệnh CREATE TABLE hoặc cung ứng sau bằng lệnh ALTER TABLE.

CREATE TABLE . ( ID INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000), Code VARCHAR(10) NOT NULL, Description VARCHAR(200) NOT NULL, Price FLOAT NOT NULL, INDEX IX_Hash_Code HASH (Code) WITH (BUCKET_COUNT = 100000) ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);GOKnhì báo Bucket_Count: mỗi bucket tất cả dung lượng 8 byte đựng một nhỏ trỏ tới đúng khóa được index của record. Mỗi record là 1 phần của chuỗi index, được liên kết tới một record cha và một record nhỏ.Nếu con số record lớn với con số bucket bé dại thì chuỗi index sẽ dài tạo nên các bước quét kéo ra đúng record vào chuỗi đang mất nhiều thời hạn ảnh hưởng cho tới performance. Tiến trình scan này bao hàm cả tìm ra đúng mẫu nhằm update EndTs Lúc thực hiện lệnh UPDATE hay DELETE. Nếu số lượng bucket phệ và số lượng data không nhiều thì gây dư quá cùng tiêu tốn lãng phí bộ nhớ.Không bao gồm con số lý tưởng phát minh giỏi đúng đắn để set đến bucket count. Microsoft khuyên đề xuất lựa chọn 1 số nằm giữa con số các record nhưng bao gồm cột index là độc nhất. lấy ví dụ giả dụ tất cả table . có 100.000 distinct ID thì lúc index trên cột này bucket count nên set trong tầm 100.000 cho 200.000.

Lưu ý: Hash indexes không hiệu quả cao Khi được tấn công trên cột gồm không ít ngôi trường đúng theo trùng (duplicates). Các quý hiếm trùng tạo nên thuộc quý hiếm hash (băm) giống nhau sẽ tạo thành một chuỗi link index nhiều năm. Nói phổ biến, trường hợp tỉ lệ thành phần toàn bô record trên tổng thể record tuyệt nhất lớn hơn 10 thì nên cần áp dụng range index để sửa chữa thay thế. Ví dụ nếu như gồm 100.000 "Product" trong một bảng nhưng tất cả tổng số "Code" độc nhất là 300 thì không nên dùng hash index bên trên cột "Code" nhưng buộc phải cần sử dụng range index, vì chưng tỉ lệ thành phần 100.000 / 300 ~ 333.

Nguồn tham khảo:https://www.simple-talk.com/sql/learn-sql-server/introducing-sql-server-in-memory-oltp/http://lethaihoangquan lại.blogspot.com/2017/05/gioi-thieu-sql-server-in-memory-oltp.html