![]() |
|
|
Thread Tools |
|
#11
|
|||
|
|||
|
Re: Hỏi cách xóa 1 tỉ dòng dữ liệu trong MS_SQL
Quote:
Chức năng partition hay columnstore có thể apply được trên database (sql server 2012 đã có), tuy nhiên vấn đề lớn phát sinh thêm đó là phải đợi nó scan full 1.5 tỉ row nhé. Mà vì con database server trên bị xiềng về hardware rồi (theo mình nghĩ cấu hình nó tầm 16Gb là cùng) thì chạy 1.5 tỉ row để apply partition ko nổi vì out memory ngay, nếu siết memory thì phải đợi cả hàng chục tiếng. |
| dreamnight |
| View Public Profile |
| Find all posts by dreamnight |
|
#12
|
|||
|
|||
|
Re: Hỏi cách xóa 1 tỉ dòng dữ liệu trong MS_SQL
Quote:
__________________
[COLOR="White"]Quyền lực của nhà nước là quyền tạo ra tội phạm. Họ sẽ đưa ra nhiều điều luật đến mức chúng mày đéo thể sống mà không phạm tội.[/COLOR] |
|
#13
|
||
|
||
|
Re: Hỏi cách xóa 1 tỉ dòng dữ liệu trong MS_SQL
Tạo job cho nó xóa từ từ vài trăm k rows mỗi 10p thì từ từ cũng xong thôi chứ nhỉ? Có gấp gáp không thím?
|
|
#14
|
|||
|
|||
|
Re: Hỏi cách xóa 1 tỉ dòng dữ liệu trong MS_SQL
Quote:
__________________
[COLOR="White"]Quyền lực của nhà nước là quyền tạo ra tội phạm. Họ sẽ đưa ra nhiều điều luật đến mức chúng mày đéo thể sống mà không phạm tội.[/COLOR] |
|
#15
|
|||
|
|||
|
Re: Hỏi cách xóa 1 tỉ dòng dữ liệu trong MS_SQL
Quote:
|
| dreamnight |
| View Public Profile |
| Find all posts by dreamnight |
|
#16
|
||
|
||
|
Re: Hỏi cách xóa 1 tỉ dòng dữ liệu trong MS_SQL
Quote:
|
|
#17
|
||
|
||
|
Re: Hỏi cách xóa 1 tỉ dòng dữ liệu trong MS_SQL
Rốt cục là thớt dùng cách gì vậy? Chia sẻ lên anh em còn học hỏi nào.
|
|
#18
|
||
|
||
|
1. Một ngày insert tầm 500k row là tương đối nhiều. Có nhất thiết phải dùng SQL database để lưu không? Vì bạn bảo đây là bản lưu report. Mình cũng không biết report về gì nhưng từ con số 500k row/ngày thì nghe vẻ con số khá tương tự việc logging. Nếu report của bạn mà chỉ dùng ở mức hạn chế, ví dụ query theo ngày hay theo tháng, thì theo mình lưu vào blob store trên clould cho rẻ. Vì SQL tính giá thành đắt, dùng nó cho dữ liệu có index thôi.
2. Có một solution khác #2 một chút. Là tạo một bảng mới cấu trúc y hệt bảng cũ. Yeu cầu cần sửa code một chút. Khi write thì write vào bảng mới, khi read thì read từ bảng mới, nếu không thấy thì read từ bảng cũ. Chạy job đến ngày hết hạn thì xoá bớt dữ liệu, hoặc canh đến ngày hết hạn thì truncate bảng cũ đi 3. Cái job chạy lập lịch để xoá bớt dữ liệu: mình thấy rất phí resource, mỗi ngày insert 500k row và expect là cũng sẽ có 500k row của một ngày nào đó trong quá khứ bị xoá. Cảm giác database của thím đang bị stress vì cái hoạt động insert/delete report, performance của cả engine bị drag down vì thằng này - mặc dù nó có thể ko phải là business chính. Theo mình thì nên cô lập cái chức năng report hoặc re-design lại cái thiết kế reporting. Nhiều writes dư thừa quá...
__________________
A chill java developer :3 |
|
#19
|
|||
|
|||
|
Re: Hỏi cách xóa 1 tỉ dòng dữ liệu trong MS_SQL
Lạm bàn một chút về mấy vụ database này. Theo mình thấy 1 ngày 500.000 dòng thì nghe nhiều đấy, nhưng kinh nghiệm của mình quy ra columnstore thì không nhiều đâu, mới chỉ bằng 1 nửa của 1 full rowgroup à. Mình ước tính cả database 10 năm 1,5 tỉ dòng kia mà dã columnstore index, không có rowstore index nào khác thì chỉ ~100 -> 200 GB là cùng.
Cỡ này không đến mức phang cả cái giải pháp data lake trên blob/data lake storage đâu. 500.000 dòng 1 ngày theo mình là quá nhỏ so với cái hệ này. Mình thấy chỉ nên nghĩ đến data lake khi data dự tính có chừng > 500GB dữ liệu file parquet. (Mình ước tính phải khoảng tương đương vài chục tỉ dòng). Không biết là do mình có làm sai, không biết cách dùng hay gì ko nhưng theo kinh nghiệm của mình thì trên 1 dataset nhỏ vài triệu row đến vài chục triệu row, SQL Server thực hiện aggregate bằng columnstore index scan sẽ nhanh hơn dùng Spark aggregate trên 1 file parquet. .Khi mà data lớn lên hẳn nữa rồi, bắt buộc phải tìm giải pháp mới, mà chơi trên cloud Azure thì có thể nghĩ đến kiểu giải pháp kiểu như Azure Synapse Analytic. Mấy cái này nó kiểu chả khác gì SQL bình thường nhưng có siêu scale khổng lồ. Tuy nhiên thì nó đắt đỏ khủng khiếp. Còn ba cái quỷ chơi theo kiểu data lake này, storage thì siêu rẻ, nhưng còn phải kéo theo 1 tầng query, xử lý kiểu Hadoop Hive, Spark hoặc mấy cái như Azure Data Lake Analytic. Được cái là scale gần như vô hạn. Mà cái này hơi bị hiếm với khó xài, kiếm được analyst biết xài để còn mine được data hơi bị khó, còn engineer thì cũng chẳng mấy người rành để mà thiết kế điều khiển. 1355308Tất nhiên ta có thể mix như các data mart quan trọng, chính yếu, đã được cô đọng lên, analyst chơi nhiều thì giữ trên 1 cái RDBMS. Còn đối với kiểu mấy cái nho nhỏ, kiểu event, log...số lượng cực lớn thì giữ trong data lake cũng khá đẹp, khi cần thì dùng mấy cái như Spark ad-hoc query vào. |
![]() |
|
|