Tôi đang thu thập các bài đọc từ vài nghìn cảm biến và lưu trữ chúng trong cơ sở dữ liệu MySQL. Có vài trăm lần chèn mỗi giây. Để cải thiện hiệu suất chèn, tôi lưu trữ các giá trị ban đầu vào một bảng bộ đệm MEMORY. Một lần một phút, tôi chạy một thủ tục được lưu trữ để di chuyển các hàng được chèn từ bộ nhớ đệm vào một bảng vĩnh viễn.Làm cách nào để di chuyển các hàng từ bảng này sang bảng khác?
Về cơ bản tôi muốn làm như sau trong thủ tục lưu trữ của tôi để di chuyển hàng từ bộ đệm tạm thời:
INSERT INTO data SELECT * FROM data_buffer;
DELETE FROM data_buffer;
Thật không may là trước đó là không sử dụng được vì quá trình thu thập dữ liệu chèn hàng bổ sung trong "data_buffer" giữa INSERT và DELETE ở trên. Vì vậy, những hàng đó sẽ bị xóa mà không bị chèn vào bảng "dữ liệu".
Làm cách nào để tôi có thể thực hiện phép toán nguyên tử hoặc tạo câu lệnh DELETE để chỉ xóa các hàng được CHỌN và CH INSN trong câu lệnh trước?
Tôi muốn thực hiện điều này theo cách tiêu chuẩn hoạt động trên các công cụ cơ sở dữ liệu khác nhau nếu có thể.
Tôi không muốn thêm bất kỳ cột "id" bổ sung nào vì yêu cầu lưu trữ và chi phí hoạt động.
Tôi muốn có SELECT_AND_DELETE hoặc tuyên bố MOVE trong SQL tiêu chuẩn hoặc một cái gì đó tương tự ...
Bạn có thể cung cấp cấu trúc của bảng data_buffer không? –
chắc: CREATE TABLE 'data_buffer' ( ' time' int (11) NOT NULL, 'sensor' smallint (6) NOT NULL, 'giá trị' nổi NOT NULL ) ENGINE = NHỚ DEFAULT CHARSET = latin1; – snap
Tôi thực sự có một giải pháp cụ thể của MySQL nhưng có vẻ như tôi không được phép đăng nó trong phần câu trả lời trước 8 giờ. Tôi thực sự ghét những giới hạn trong stackoverflow ... – snap