2010-02-06 40 views
6

Tôi đã đi qua chủ đề và phát hiện ra liên kết này khá hữu ích và đơn giản cùng một lúc. Storing matrices in a relational database Nhưng bạn có thể xin vui lòng cho tôi biết nếu đường đề cập nhưMa trận và cơ sở dữ liệu

A B C D 
E F G H 
I J K L 

[A B C D E F G H I J K L] 

là cách đơn giản hoặc thậm chí đáng tin cậy lưu trữ các yếu tố ma trận trong cơ sở dữ liệu tốt nhất và. Hơn nữa tôi cần phải nhân hai ma trận và làm cho hoạt động năng động. Vì vậy, sẽ lưu trữ dữ liệu này tạo ra bất kỳ vấn đề cho nhiệm vụ?

Trả lời

0

là cách tốt nhất và đơn giản hoặc thậm chí đáng tin cậy để lưu trữ các phần tử ma trận trong cơ sở dữ liệu. Hơn nữa tôi cần phải nhân hai ma trận và làm cho hoạt động năng động. Vì vậy, sẽ lưu trữ dữ liệu này tạo ra bất kỳ vấn đề cho nhiệm vụ?

Tôi sẽ bắt đầu bằng cách nói cả hai phương pháp đều hợp lệ, nhưng phương pháp thứ hai không đủ như bạn viết. Bạn phải có một số thông tin khác, như độ dài của các hàng hoặc chỉ mục (hàng, col) của từng phần tử để lưu trữ ma trận dưới dạng mảng 1D. Điều này thường được thực hiện cho các ma trận thưa thớt, nơi có rất nhiều số không xung quanh các giá trị được nhóm lại ở hai bên của đường chéo.

Kiên trì ma trận trong cơ sở dữ liệu và hoạt động trên ma trận trong bộ nhớ là hai điều riêng biệt.

Nhiệm vụ như nhân chỉ yêu cầu (hàng, col) chỉ mục. Lưu trữ ma trận dưới dạng mảng 2D có nghĩa là bạn sẽ có chúng, vì vậy không cần thông tin nào khác. Mảng 1D cũng cần thông tin này, vì vậy bạn sẽ phải cung cấp nó.

Ưu điểm thay đổi đối với mảng 1D đối với các ma trận thưa thớt. Bạn không phải lưu trữ các giá trị 0 ngoài băng thông trong trường hợp đó, nhưng các hoạt động của bạn như phép cộng và phép nhân trở nên phức tạp hơn để mã hóa.

0

Tôi nghĩ rằng nó phụ thuộc khá nhiều vào cách bạn muốn sử dụng ma trận trong ứng dụng của mình.

Chỉ có DB cho sự kiên trì cho cùng một ứng dụng, tốc độ là quan trọng và kích thước không thể biết trước? Làm cho chương trình tuần tự hóa của riêng bạn và lưu blob nhị phân.

DB có phải chia sẻ giữa các ứng dụng, với kích thước chưa biết trước không? Sử dụng danh sách phân cách bằng dấu phẩy.

Bạn có quan tâm đến tính toàn vẹn của dữ liệu, nhập an toàn và muốn truy vấn từng ô riêng lẻ không? Sau đó sử dụng lược đồ (hàng, cột, giá trị ô).

Bạn có biết rằng ma trận của bạn có kích thước cố định và tương đối nhỏ, ví dụ ma trận chuyển đổi 4X4 và sẽ có mối quan hệ 1-1 với bất kỳ phần tử nào bạn có trong DB? Sau đó, bạn thực sự có thể có 16 hàng trong bảng của bạn, được xếp thành hàng.

Hãy nghĩ về các trường hợp sử dụng của bạn và thử nghiệm!

1

Trong postgresql bạn thực sự có thể có mảng đa chiều, xác định các loại của riêng bạn và xác định các chức năng của riêng bạn trên các loại đó. Ví dụ: đơn giản có thể làm:

CREATE TABLE tictactoe (
    squares integer[3][3] 
); 

Xem The PostgreSQL manual để biết thông tin về cách tạo loại của riêng bạn.

Các vấn đề liên quan