2011-02-04 34 views
9

Theo mục đích của chạy một số lượng lớn các bài kiểm tra mà tương tác với cơ sở dữ liệu, tôi muốn làm hai việc:Buộc toàn bộ cơ sở dữ liệu MySQL được trong bộ nhớ

  1. Tôi muốn sao chép các schema của một cơ sở dữ liệu mà không cần sao chép dữ liệu của nó. Tôi có thể làm điều này với một kịch bản mà lấy các câu lệnh CREATE TABLE từ mỗi bảng trong cơ sở dữ liệu.

  2. Khi tạo cơ sở dữ liệu này, tôi muốn ép buộc nó là 100% bộ nhớ.

Tôi đang mắc kẹt về cách thực hiện phần 2 - Có cách nào dễ dàng hơn để thực hiện việc này ngoài chỉ định động cơ của mỗi bảng không? Bằng cách nào đó mà có vẻ như một cách nghèo để làm điều đó.

Trả lời

11

Tạo cơ sở dữ liệu trong /dev/shm (ubuntu | debian) và nó sẽ nằm trong RAM. Nó có thể tăng lên đến 0,5 bộ nhớ có sẵn.

+0

Điều này nghe có vẻ tốt, nhưng có một giải pháp tương tự cho CentOS? – Fragsworth

+0

Kiểm tra xem bạn có: $ mount | grep shm. Nếu không, bạn có thể tạo một hệ thống tập tin trên một/dev/ram * và gắn nó vào đâu đó. –

+0

Centos 5.0+ luôn có/dev/shm mounted. Tuy nhiên, bạn có thể gắn kết một tmpfs bất cứ nơi nào bạn muốn. tmpfs đã có sẵn trong một thời gian. – MarkR

1
SET storage_engine=MEMORY; 

Thao tác này sẽ đặt công cụ lưu trữ mặc định cho phiên hiện tại.

+0

Có một giới hạn lớn như thế nào một bảng NHỚ có thể được. đó là nghi ngờ (nhưng có thể) rằng tất cả các bảng trong một db sẽ có thể là bảng MEMORY –

+2

Các bảng bộ nhớ vẫn có siêu dữ liệu được lưu trữ trên đĩa và chúng không hoạt động giống như các công cụ khác. – MarkR

+0

Mở rộng thêm nhận xét @MarkR: 'MyISAM' và' Innodb' đã rất khác và có thể dẫn đến hành vi khác nhau, dẫn đến các lỗi chỉ xảy ra với một động cơ. Vì vậy, tôi khuyên bạn KHÔNG nên thay đổi công cụ cơ sở dữ liệu của bạn thành 'MEMORY', vì nó rất có khả năng sẽ giới thiệu các lỗi cụ thể cho động cơ. –

2

dtmilano cho biết, bạn có thể đặt nó trên hệ thống tệp được gắn tmpfs. Nó không phải là/dev/shm, nhưng đó là một nơi mà tmpfs thường được gắn kết.

Bạn có thể tạo một hình mới bất cứ nơi nào, mặc dù:

mount none -t tmpfs /path/to/dir 

Nếu nó lấp đầy tất cả các RAM có sẵn của bạn, nó sẽ sử dụng hoán đổi như một bản sao lưu.

Đặt nó vào/etc/fstab để gắn lại khi khởi động. Chỉ cần nhớ, đó là một đĩa ram, do đó, nó bắt đầu ra trống mỗi khi bạn khởi động lại. Xem: http://www.howtoforge.com/storing-files-directories-in-memory-with-tmpfs

Cách khác, theo đề xuất của yuxhuang bạn có thể tạo bảng loại MEMORY. Nó cũng trống khi khởi động lại, mặc dù định nghĩa bảng vẫn còn. Tuy nhiên, loại bảng MEMORY có một số hạn chế. Ví dụ: nó sử dụng các hàng có kích thước cố định, vì vậy, các cột textblob không được phép và varchar không phải là độ dài thay đổi. Xem: http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

0

Nếu bạn đang sử dụng Windows, trong kịch bản tạo ra cơ sở dữ liệu của bạn, bạn có thể tạo các bảng thêm tham số NHỚ như thế này:

CREATE TABLE IF NOT EXISTS `user` (
    `id` varchar(23) NOT NULL, 
    `username` varchar(250) NOT NULL, 
    ... 
) ENGINE=MEMORY DEFAULT CHARSET=utf8; 
Các vấn đề liên quan