2009-02-18 31 views
5

Cho phép giả định các môi trường tương tự cho PHP5 hoạt động với các tệp MySQL5 và CSV. MySQL nằm trên cùng một máy chủ như các tập lệnh được lưu trữ.Hiệu suất CSV và MySQL

MySQL có luôn nhanh hơn tìm cách/tìm kiếm/thay đổi/thêm/xóa bản ghi vào CSV không?

Hoặc có một số lượng dữ liệu bên dưới hiệu suất PHP + CSV nào tốt hơn việc sử dụng máy chủ cơ sở dữ liệu không?

+0

Đo lường đường cơ sở của bạn cho CSV so với MySQL là gì? Nói chung, CSV là nhiều, nhanh hơn nhiều so với MySQL. Tuy nhiên, câu hỏi của bạn nói rằng MySQL sẽ nhanh hơn. Bạn đang làm gì khiến cho MySQL nhanh hơn CSV? –

Trả lời

6

CSV sẽ không cho phép bạn tạo chỉ mục để tìm kiếm nhanh.

Nếu bạn luôn cần tất cả dữ liệu từ một bảng duy nhất (như cho application settings), CSV là nhanh hơn, nếu không thì không.

Tôi thậm chí không xem xét SQL queries, transactions, data manipulation hoặc concurrent access đây, như CSV chắc chắn không phải cho những điều này.

+0

Có thể có một số trường hợp cạnh khác mà CSV nhanh hơn ... nhưng đây là trường hợp duy nhất tôi có thể nghĩ đến. :) – jheriko

0

Cơ sở dữ liệu để lưu trữ và truy xuất dữ liệu. Nếu bạn cần bất cứ điều gì nhiều hơn đồng bằng dòng/nhập bổ sung hoặc danh sách số lượng lớn, tại sao không đi cho cách cơ sở dữ liệu? Nếu không, bạn về cơ bản phải mã các chức năng (bao gồm cả xóa, phân loại vv) chính mình.

0

CSV là định dạng cực kỳ dễ vỡ và yêu cầu ứng dụng của bạn thực hiện tất cả định dạng và tính toán. Nếu bạn cần cập nhật một bản ghi spesific trong một csv bạn sẽ phải đọc toàn bộ tập tin csv, tìm mục nhập trong bộ nhớ sẽ cần phải thay đổi, sau đó viết toàn bộ tập tin ra một lần nữa. Điều này rất chậm rất nhanh. CSV chỉ hữu ích để viết một lần, hãy thêm lại một lần ứng dụng loại.

4

Không, MySQL có thể sẽ chậm hơn để chèn (nối vào CSV rất nhanh) và tìm kiếm quét bảng (không dựa trên chỉ mục).

Việc cập nhật hoặc xóa khỏi CSV là không cần thiết - tôi để điều đó như là một bài tập cho người đọc.

Nếu bạn sử dụng CSV, bạn cần thực sự cẩn thận để xử lý nhiều luồng/quy trình một cách chính xác, nếu không bạn sẽ nhận được dữ liệu xấu hoặc làm hỏng tệp của mình.

Tuy nhiên, cũng có những lợi thế khác. Chăm sóc để tìm ra cách bạn thực hiện ALTER TABLE trên CSV?

Sử dụng CSV là một ý tưởng rất tồi nếu bạn cần UPDATE, DELETEs, ALTER TABLE hoặc truy cập tệp từ nhiều quá trình cùng một lúc.

3

Là một người đến từ ngành công nghiệp dữ liệu, tôi đã xử lý chính xác tình huống này.

Nói chung, MySQL sẽ nhanh hơn.

Tuy nhiên, bạn không nêu rõ loại ứng dụng bạn đang phát triển. Bạn đang phát triển một ứng dụng kho dữ liệu mà chủ yếu được sử dụng để tìm kiếm và truy xuất hồ sơ? Có bao nhiêu trường thường có trong hồ sơ của bạn? Có bao nhiêu bản ghi thường có trong các tệp dữ liệu của bạn? Những tệp này có bất kỳ thuộc tính quan hệ nào với nhau không, tức là bạn có tệp của khách hàng và tệp của đơn đặt hàng của khách hàng không? Bạn có bao nhiêu thời gian để phát triển một hệ thống?

Câu trả lời sẽ tùy thuộc vào câu trả lời cho các câu hỏi được liệt kê trước đây.Tuy nhiên, thông thường, bạn có thể sử dụng các hướng dẫn sau:

Nếu bạn đang xây dựng ứng dụng kho dữ liệu với số liệu vượt quá một triệu, bạn có thể xem xét bỏ cả hai và di chuyển đến Column Oriented Database.

CSV có thể sẽ nhanh hơn cho các tập dữ liệu nhỏ hơn. Tuy nhiên, việc đưa các thói quen chèn của riêng bạn vào CSV có thể gây đau đớn và bạn mất đi những lợi thế của việc lập chỉ mục cơ sở dữ liệu.

Đề xuất chung của tôi sẽ chỉ sử dụng MySql, như tôi đã nói trước đây, trong hầu hết các trường hợp, nó sẽ nhanh hơn.

1

Từ quan điểm hiệu suất thuần túy, nó hoàn toàn phụ thuộc vào hoạt động bạn đang làm, như @MarkR nói. Phụ thêm vào một tệp phẳng rất nhanh. Như đang đọc trong toàn bộ tệp (đối với tìm kiếm không được lập chỉ mục hoặc các mục đích khác).

Cách duy nhất để biết chắc chắn điều gì sẽ hoạt động tốt hơn cho các trường hợp sử dụng của bạn trên nền tảng của bạn là làm hồ sơ thực sự. Tôi có thể đảm bảo với bạn rằng việc quét toàn bộ bảng trên cơ sở dữ liệu hàng triệu sẽ chậm hơn grep trên một tệp CSV hàng triệu. Nhưng đó có lẽ không phải là một ví dụ thực tế về cách sử dụng của bạn. Các "điểm ngắt" sẽ thay đổi cực kỳ tùy thuộc vào kết hợp truy xuất cụ thể của bạn, tìm kiếm được lập chỉ mục, tìm kiếm không được lập chỉ mục, cập nhật, nối thêm.

Với tôi, đây không phải là vấn đề về hiệu suất. Dữ liệu của bạn có âm thanh theo định hướng, và MySQL là rất cao (nói chung) để đối phó với loại dữ liệu đó. Nếu các trường hợp sử dụng của bạn thậm chí còn phức tạp hơn một chút do thời gian dữ liệu của bạn lớn, việc xử lý tệp CSV 100k dòng sẽ trở nên khủng khiếp so với bảng db kỷ lục 100k, ngay cả khi hiệu suất tốt hơn (không phải do có nghĩa là được bảo đảm).

1

Phụ thuộc vào việc sử dụng. Ví dụ về cấu hình hoặc tập tin ngôn ngữ CSV có thể làm tốt hơn. Dù sao, nếu bạn đang sử dụng PHP5, bạn có tùy chọn thứ 3 - SQLite, được nhúng trong PHP. Nó cho phép bạn dễ sử dụng như các tệp thông thường, nhưng mạnh mẽ của RDBMS.

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