Bạn không thực sự nói nền tảng của mình là gì và bạn biết bao nhiêu về lập trình và thiết kế cơ sở dữ liệu . Có vẻ như bạn nên đọc một số bài. Về mặt khái niệm, mặc dù thiết kế của bạn khá đơn giản. Mô tả của bạn chỉ xác định hai thực thể:
- Công cụ tài chính; và
- Trích dẫn.
Vì vậy, bạn cần xác định các thuộc tính.
Công cụ tài chính:
- Mã bảo mật;
- Thị trường;
- v.v.
Trích dẫn:
- Dấu thời gian;
- Công cụ tài chính;
- Giá dự thầu; và
- Hỏi giá.
Tham chiếu đến công cụ tài chính được gọi là khóa ngoại . Mỗi bảng cũng cần một khóa chính , có thể chỉ là trường tăng tự động.
Về mặt khái niệm khá đơn giản.
CREATE TABLE instrument (
id BIGINT NOT NULL AUTO_INCREMENT,
code CHAR(4),
company_name VARCHAR(100),
PRIMARY KEY (id)
);
CREATE TABLE quote (
id BIGINT NOT NULL AUTO_INCREMENT,
intrument_id BIGINT NOT NULL,
dt DATETIME NOT NULL,
bid NUMERIC(8,3),
ask NUMERIC(8,3),
PRIMARY KEY (id)
)
CREATE INDEX instrument_idx1 ON instrument (code);
CREATE INDEX quote_idx1 ON quote (instrument_id, dt);
SELECT (bid + ask) / 2
FROM instrument i
JOIN quote q ON i.id = q.instrument_id
WHERE i.code = 'GOOG'
AND q.dt >= '01-06-2008' AND q.dt < '02-06-2008'
Nếu tập dữ liệu của bạn đủ lớn, bạn có thể muốn bao gồm (giá thầu + yêu cầu) / 2 trong bảng để không phải tính toán nhanh.
Ok, vậy đó là chế độ xem bình thường. Sau đó, bạn có thể cần phải bắt đầu tối ưu hóa hiệu suất. Hãy xem xét câu hỏi này về việc lưu trữ hàng tỷ hàng trong MySQL . Phân vùng là một tính năng của MySQL 5.1+ (khá mới).
Nhưng một câu hỏi khác cần tự hỏi mình là:bạn có cần lưu trữ tất cả dữ liệu này không? Lý do tôi hỏi điều này là vì tôi đã từng làm việc trong lĩnh vực môi giới trực tuyến và chúng tôi chỉ lưu trữ tất cả các giao dịch trong một khoảng thời gian rất hạn chế và các giao dịch sẽ là một tập hợp dữ liệu nhỏ hơn so với báo giá mà bạn có vẻ muốn.
Việc lưu trữ hàng tỷ hàng dữ liệu là một vấn đề nghiêm trọng và bạn thực sự cần sự trợ giúp nghiêm túc để giải quyết.