2015-09-24 13 views
5

Tôi cần phải bắt đầu bằng cách chỉ ra rằng không có nghĩa là tôi là chuyên gia về cơ sở dữ liệu theo bất kỳ cách nào. Tôi biết cách làm quen với các ứng dụng lập trình bằng nhiều ngôn ngữ yêu cầu phần mềm cơ sở dữ liệu và tương đối quen thuộc với MySQL, Microsoft SQL Server và giờ là MEMSQL - nhưng lại không phải là chuyên gia về cơ sở dữ liệu.MEMSQL so với MySQL

Tôi đã nghiên cứu phát triển một ứng dụng có tham chiếu chéo nhiều bảng khác nhau. Một ví dụ rất đơn giản về vấn đề tôi mới gặp phải, là tôi phải:

  1. Trên cơ sở hàng ngày, kéo 600.000 xuống 1 triệu bản ghi vào bảng tạm thời.
  2. So sánh những gì đã thay đổi giữa lần kéo dữ liệu mới này và tệp cũ. Ghi lại thông tin đó trên một bảng riêng biệt.
  3. Repopulate bảng với các bản ghi mới.

Chạy # 2 là một truy vấn tương tự như:

SELECT * FROM (NEW TABLE) LEFT JOIN (OLD TABLE) ON (JOINED FIELD) WHERE (OLD TABLE.FIELD) IS NULL 

Trong trường hợp này, tôi đang so sánh hai bảng trên một lĩnh vực nhất định và sau đó kéo các thông tin về những gì đã thay đổi.

Trong MySQL (v5.6.26, x64), thời gian truy vấn của tôi hết. Tôi đang chạy 4 vCPUs và 8 GB RAM nhưng lưu ý rằng phần còn lại của cấu hình của tôi là cấu hình mặc định (không tinh chỉnh bất kỳ tham số nào).

Trong MEMSQL (v5.5.8, x64), truy vấn của tôi chạy trong khoảng 3 giây trong lần thử đầu tiên. Tôi đang chạy chính xác cùng một cấu hình máy chủ ảo với 4 vCPUs và 8 GB RAM, cũng lưu ý rằng phần còn lại của cấu hình của tôi là cấu hình mặc định (không tinh chỉnh bất kỳ tham số nào).

Ngoài ra, trong MEMSQL, tôi đang chạy một cấu hình nút đơn. Điều tương tự cho MySQL.

Tôi thích thực tế là sử dụng MEMSQL cho phép tôi tiếp tục phát triển dự án của mình và tôi sẽ xem xét các truy vấn và lượt xem bảng chéo lớn hơn thậm chí lớn hơn mà tôi có thể chạy trên MEMSQL ... một thế giới lý tưởng, tôi sẽ sử dụng MySQL. Tôi đã bắt gặp thực tế là tôi cần sử dụng một bộ công cụ khác để quản lý cá thể của mình (ví dụ: MySQL Workbench hoạt động tương đối tốt với máy chủ MEMSQL nhưng tôi thực sự cần xây dựng các khung nhìn và bảng bằng cách sử dụng SQL Workbench nguồn mở và điều tương tự để sử dụng trình kết nối Visual Studio MySQL, hoạt động, nhưng đôi khi có thể gây đau đớn, vì một lý do nào đó tôi có thể thêm các truy vấn nhưng không thể thêm các bộ điều hợp bảng) ... xin lỗi, tôi sẽ gửi riêng xem xét cho rằng :)

Xem xét cả hai máy ảo chính xác cấu hình giống nhau, và SSD được hỗ trợ, bất cứ ai có thể cho tôi bất kỳ lời khuyên nào về cách tinh chỉnh cá thể MySQL của tôi để chạy các truy vấn lớn như trên không? Tôi hiểu rằng tôi cũng có thể tạo ra một cơ sở dữ liệu trong bộ nhớ nhưng tôi đã đọc có thể có một số vấn đề tồn tại với việc đó, không chắc chắn.

Cảm ơn bạn!

+0

Trường có được lập chỉ mục trên cả hai bảng không? (Nếu trong một chỉ mục tổng hợp, nó là trường đầu tiên của chỉ mục?) – Uueerdo

+0

Xin chào Uueerdo, không có trường được nối nào không được lập chỉ mục. Cảm ơn bạn, tôi sẽ thêm chúng dưới dạng chỉ mục và xem liệu nó có giúp ích gì không! – JDA

Trả lời

3

Lý do rất có thể xảy ra là vì bạn không có chỉ mục trên joined field trong một hoặc cả hai bảng. Theo bài viết này:

https://www.percona.com/blog/2012/04/04/join-optimizations-in-mysql-5-6-and-mariadb-5-5/

Vanilla MySQL chỉ hỗ trợ vòng lặp lồng nhau tham gia, đòi hỏi phải có các chỉ số thực hiện tốt (nếu không họ mất nhiều thời gian bậc hai).

Cả hai MemSQL và MariaDB đều hỗ trợ cái gọi là tham gia băm, không yêu cầu bạn có chỉ mục trên bảng, nhưng tiêu thụ nhiều bộ nhớ hơn. Vì bộ dữ liệu của bạn không đáng kể cho kích thước RAM hiện đại, chi phí bộ nhớ bổ sung đó không được chú ý trong trường hợp của bạn.

Vì vậy, tất cả những gì bạn cần làm để giải quyết vấn đề là thêm chỉ mục trên joined field trong cả hai bảng.

Ngoài ra, vui lòng mô tả các vấn đề bạn đang gặp phải với các công cụ nguồn mở khi kết nối với MemSQL trong một câu hỏi riêng hoặc tại chat.memsql.com để chúng tôi có thể khắc phục trong phiên bản tiếp theo (tôi làm việc cho MemSQL) Các công cụ MySQL là một trong những ưu tiên của chúng tôi).

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