Vì lượng dữ liệu của một công ty điển hình đã tăng theo cấp số nhân, nên việc tối ưu hóa lưu trữ dữ liệu càng trở nên quan trọng hơn. Kích thước dữ liệu của bạn không chỉ ảnh hưởng đến kích thước và chi phí lưu trữ mà còn ảnh hưởng đến hiệu suất truy vấn. Yếu tố quan trọng trong việc xác định kích thước dữ liệu của bạn là kiểu dữ liệu bạn chọn. Hướng dẫn này sẽ giải thích cách chọn loại dữ liệu phù hợp.
Loại Dữ liệu là gì?
Loại dữ liệu xác định loại và phạm vi dữ liệu có thể được lưu trữ trong một trường (hoặc cột) nhất định.
Hãy xem xét một bảng bán hàng với các bản ghi mẫu sau:
Mỗi trường có loại và phạm vi giá trị riêng:
buy_time :ngày và giờ giảm giá sale_id :các giá trị số nguyên tăng lên một cho mỗi lần bán hàng mới customer_id :các giá trị số nguyên tăng dần một cho mỗi khách hàng mới đơn vị tiền tệ :văn bản luôn ở mã đơn vị tiền tệ 3 ký tự số tiền_ trả tiền :giá trị số thực tiền tệ từ $ 0,00 đến $ 1.000,00 thiết bị :text, trong đó các giá trị có thể là:‘desktop’, ‘mobile app’ và ‘mobile web’ has_discount :boolean trong đó các mục nhập có thể là TRUE
hoặc FALSE
ghi chú :text, trong đó mục nhập có thể dài như những gì được phép trong công cụ nhập tác nhân của chúng tôi (250 ký tự)
Loại dữ liệu (số nguyên, văn bản, số thực, v.v.…) và phạm vi giá trị có thể có (0 đến 1.000; 3 ký tự bất kỳ; v.v.…) tương ứng với cơ sở dữ liệu cụ thể kiểu dữ liệu .
Loại dữ liệu có thể có là gì?
Các cơ sở dữ liệu khác nhau có sẵn các kiểu dữ liệu khác nhau, nhưng hầu hết đều phù hợp với các danh mục sau:
Số:
- số nguyên :cho các số không có phân số. Có thể có dấu (cho phép các giá trị âm và dương) hoặc không dấu (chỉ cho phép các số dương). Thường được sử dụng cho các trường ID và số lượng của một thứ gì đó
- thập phân (x, y) :cho các số có phân số yêu cầu độ chính xác chính xác. Có thể có dấu (cho phép các giá trị âm và dương) hoặc không dấu (chỉ cho phép các số dương). Thường được sử dụng cho các lĩnh vực tiền tệ. Người dùng chỉ định số lượng chữ số có nghĩa được phép tổng thể (x) và sau dấu thập phân (y) trong dấu ngoặc đơn
- float / double :dành cho các số có phân số không yêu cầu độ chính xác chính xác. Có thể có dấu (cho phép các giá trị âm và dương) hoặc không dấu (chỉ cho phép các số dương). Thường được sử dụng cho tất cả các số thực ngoại trừ trường tiền tệ
Ngày / giờ:
ngày :cho các giá trị ngày
- thời gian :cho các giá trị thời gian
- dấu thời gian / ngày giờ :cho các giá trị ngày và giờ
Văn bản:
- ký tự (n) :cho các chuỗi ký tự có độ dài cố định, trong đó giá trị trong dấu ngoặc đơn cho biết kích thước cố định của mỗi mục nhập
- varchar (n) :đối với các chuỗi ký tự có độ dài thay đổi, trong đó giá trị trong dấu ngoặc đơn cho biết kích thước tối đa được chấp nhận của mỗi mục nhập
Boolean:
- boolean :cho các giá trị boolean (true / false). Một số cơ sở dữ liệu (như MySQL) không có kiểu dữ liệu boolean và thay vào đó chuyển đổi các giá trị boolean thành số nguyên (1 =TRUE, 0 =FALSE)
Hầu hết các cơ sở dữ liệu cung cấp các biến thể kích thước cho từng loại. Ví dụ:MySQL cung cấp các kiểu dữ liệu số nguyên có thể có sau:
Cách chọn đúng loại dữ liệu
Chiến lược cơ bản để chọn loại dữ liệu tốt nhất là chọn loại dữ liệu nhỏ nhất phù hợp với loại dữ liệu bạn có và cho phép tất cả các giá trị khả thi của dữ liệu của bạn.
Ví dụ:customer_id
trong bảng bán hàng mẫu của chúng tôi là một số nguyên bắt đầu bằng 0. Ngày nay công ty hư cấu của chúng tôi chỉ có 15.000 khách hàng. Sử dụng bảng kiểu dữ liệu số nguyên MySQL từ phần trước, chúng ta có thể muốn chọn SMALLINT
không được đánh dấu là kiểu dữ liệu, vì đó là kiểu dữ liệu nhỏ nhất sẽ chấp nhận các giá trị số nguyên hiện tại của chúng tôi từ 0 đến 15.000. Tuy nhiên, chúng tôi kỳ vọng sẽ tiếp cận được 100.000 khách hàng trong vòng 6-12 tháng tới. Khi chúng tôi vượt quá 65,535, SMALLINT
sẽ không còn đủ. Do đó, lựa chọn tốt hơn là MEDIUMINT
không có chữ ký, sẽ hỗ trợ chúng tôi trong vài năm tới.
Bạn có thể cho phép cơ sở dữ liệu chọn kiểu dữ liệu cho bạn khi tạo bảng với các bản ghi mẫu. Tuy nhiên, điều này sẽ hiếm khi cung cấp cho bạn lựa chọn kiểu dữ liệu tốt nhất. Ví dụ:cho phép MySQL chọn kiểu dữ liệu cho bảng bán hàng với các giá trị mẫu được hiển thị trước đó sẽ gây ra một số vấn đề.
Các vấn đề chúng tôi gặp phải với các kiểu dữ liệu mà MySQL tự động chọn là:
- loại dữ liệu sai :bạn sẽ không thể sử dụng trường theo cách bạn mong đợi. Ví dụ:có
purchase_time
dưới dạng chuỗi chứ không phải kiểu dữ liệu thời gian có nghĩa là bạn sẽ không thể thực hiện các phép toán về thời gian (chẳng hạn như tính toán thời gian kể từ khi mua hàng) trên trường - quá hạn chế :MySQL sẽ đưa ra lỗi khi bạn cố gắng nhập các giá trị lớn hơn những gì kiểu dữ liệu cho phép. Ví dụ:chúng tôi sẽ gặp lỗi nếu chúng tôi bán hàng với số tiền được trả từ $ 100,00 trở lên hoặc agent_comment dài hơn 65 ký tự
- quá thận trọng :trong khi không có gì phá vỡ việc quá thận trọng với các kiểu dữ liệu, bạn sẽ lãng phí không gian lưu trữ. Với dữ liệu mẫu của mình, chúng tôi có thể tiết kiệm 15% bộ nhớ bằng cách sử dụng các tùy chọn ưu tiên ít thận trọng hơn
Cơ sở dữ liệu hiện đại càng thông minh, chủ sở hữu của dữ liệu vẫn biết rõ nhất về loại dữ liệu nào được lưu trữ và những giá trị có thể mà dữ liệu có thể nhận được trong tương lai gần. Vì vậy, bạn cần chỉ định cẩn thận các kiểu dữ liệu cho từng trường của mình.
Tài liệu về các kiểu dữ liệu cho các cơ sở dữ liệu chung khác nhau được cung cấp tại đây:
- MySQL
- Amazon Redshift
- Apache Hive
- Teradata
Kết luận
Để cơ sở dữ liệu của bạn hoạt động chính xác và được tối ưu hóa hết mức có thể, điều quan trọng là phải chọn cẩn thận các loại dữ liệu cho từng trường trong bảng của bạn.