Cái gì tốt hơn / nhanh hơn? MySql hoặc FileSystem?


9

Hãy tưởng tượng một trang web là một thư mục của mọi người. Đối với mỗi người có thể có một ảnh hồ sơ và tiểu sử.

Tôi sẽ thừa nhận các truy vấn SQL của mình có thể tốt hơn nhưng nói chung những gì sẽ nhanh hơn và sử dụng ít sức mạnh xử lý hơn.

Để kiểm tra nếu một tập tin tồn tại và sau đó mở nó hoặc

kiểm tra MySql để xem nếu một bio tồn tại và hiển thị nó.

Tôi khá chắc chắn trong trường hợp trên, hệ thống tập tin sẽ hút cơ sở dữ liệu mysql.

Điều gì xảy ra nếu tôi làm cho cơ sở dữ liệu một tệp txt được phân tách chỉ đọc?

Cái gì nhanh hơn trong trường hợp này?

Có một điểm nào đó nếu tệp txt có quá nhiều bản ghi thì tốt hơn là sử dụng MySql?


4
Hãy nói rằng bạn có 100 nghìn người trong thư mục của bạn và bạn muốn bios của những người sinh năm 1978. Bạn nghĩ khói sẽ đến từ đâu? Mở tệp 100K trong hệ thống tệp hoặc một truy vấn duy nhất trong SQL?
ypercubeᵀᴹ

1
@ypercube - Tôi đồng ý với bạn nhưng trong trường hợp hệ điều hành linux có giới hạn cho các tệp được mở đồng thời với mỗi bộ xử lý.
Satish Pandey

Câu trả lời:


17

Hệ thống tệp hữu ích nếu bạn đang tìm kiếm một tệp cụ thể, vì các hệ điều hành duy trì một loại chỉ mục. Tuy nhiên, nội dung của tệp txt sẽ không được lập chỉ mục, đây là một trong những lợi thế chính của cơ sở dữ liệu. Một cách khác là hiểu mô hình quan hệ, do đó dữ liệu không cần phải lặp đi lặp lại nhiều lần. Khác là hiểu các loại. Nếu bạn có tệp txt, bạn sẽ cần phân tích số, ngày, v.v.

Vì vậy - hệ thống tệp có thể hoạt động cho bạn trong một số trường hợp, nhưng chắc chắn không phải tất cả.


+1, hệ thống tệp cũng không tốt cho tìm kiếm một phần tên tệp hoặc thuộc tính khác. Khi số lượng tệp quá lớn, bạn có thể gặp sự cố khi tìm tệp theo cách này. Phải nói rằng thông thường sử dụng hệ thống tệp cho dữ liệu không có tính chất giao dịch và trong đó nội dung luôn được truy cập dưới dạng một đơn vị, chẳng hạn như tệp đính kèm tài liệu và tệp hình ảnh.
NoChance

12

Nó thực sự phụ thuộc vào những gì bạn đang làm. Nói chung tốc độ bạn có thể mở tệp để đọc sẽ tốt hơn tốc độ bạn có thể thiết lập kết nối mạng. Vì vậy, đối với các hoạt động rất đơn giản, hệ thống tập tin chắc chắn là nhanh hơn. Các hệ thống tập tin có thể sẽ đánh bại một RDBMS cho thông lượng đọc thô vì có ít chi phí hơn. Trong thực tế, nếu bạn nghĩ về nó, cơ sở dữ liệu không bao giờ có thể nhanh hơn hệ thống tập tin mà nó nằm trên phương diện thông lượng thô.

Đối với các hoạt động rất phức tạp, hệ thống tập tin có thể sẽ rất chậm. Ví dụ:

Đọc 10 dòng trong số 1 tỷ tệp này và sau đó tìm kiếm các dòng khớp trong tệp khác này. Tôi thương hại bạn nếu bạn phải làm điều này. Tuy nhiên, một máy chủ cơ sở dữ liệu tốt có các chiến lược để thực hiện việc này nhanh và tốt để bạn không phát minh lại bánh xe.

Ngoài ra, bạn thực sự cần phải tìm ra những gì bạn đang làm. Dữ liệu nào bạn đang lưu trữ? Làm thế nào bạn sẽ biến đổi nó? Nếu đó là tệp hình ảnh 100k, giải pháp của bạn sẽ trông rất khác so với nếu đó là thư mục dành cho người 100k. (LDAP có thể? Hoặc cơ sở dữ liệu SQL? Có thể phụ thuộc vào những gì bạn đang làm, có lẽ.) Chìa khóa ở đây là chọn các công cụ phù hợp với những gì bạn đang làm và cung cấp cho bạn chỗ để thêm nhiều sử dụng hơn là mọi thứ dường như nhanh nhất trường hợp sử dụng khá trừu tượng. Cơ sở dữ liệu là công cụ tuyệt vời, nhưng bạn không thể có câu trả lời hay cho câu hỏi như thế này.

Cuối cùng tối ưu hóa sớm là gốc rễ của mọi tội lỗi. Chọn các công cụ hữu ích bây giờ và tìm ra phần còn lại sau.


Tất nhiên, nếu bạn có hai cá thể ảo giao tiếp qua một NIC ảo hoặc DB chạy cùng phiên bản với máy chủ ứng dụng, nếu bạn có dung lượng bộ nhớ hợp lý, bạn có thể đảm bảo rằng cơ sở dữ liệu đọc nhanh hơn tốc độ đọc fs đôi khi, bởi vì nếu bạn dựa vào hệ thống tập tin, bạn sẽ phải chịu trách nhiệm về thuật toán thay thế bộ nhớ cache / trang của trình điều khiển fs, trong khi cơ sở dữ liệu có thể dự trữ các phân đoạn bộ nhớ sao cho chúng không bao giờ bị tráo đổi, trước tiên cần đặt độ trễ của ứng dụng . Giả sử bạn đã hoán đổi kích hoạt.
Bắn Parthian

Dòng cuối cùng của bạn thúc đẩy tôi ...
@Chris

5

Hệ thống tập tin có thể nhanh hơn ban đầu, nhưng tôi nghi ngờ nó. Tuy nhiên, khi kích thước dữ liệu của bạn tăng lên, bạn có thể sẽ phải cơ cấu lại hệ thống tệp của mình để duy trì hiệu suất. Bên cạnh khả năng rõ ràng để lập chỉ mục trên nhiều thuộc tính, cơ sở dữ liệu có xu hướng mở rộng tốt hơn.

Bộ đệm web hoạt động tương tự như những gì bạn đang xem xét sử dụng cây thư mục để duy trì hiệu suất. Chúng cũng có xu hướng tương đối cố định, vì vậy chúng không phải đối phó với quy mô ngày càng tăng.

Đối với loại ứng dụng này, tôi sẽ bắt đầu với một cơ sở dữ liệu, vì nó phù hợp hơn với nhu cầu của bạn. Nó sẽ mở rộng quy mô tốt hơn nhiều trong thời gian dài. So với hầu hết các hệ thống tập tin, một cơ sở dữ liệu cũng sẽ hiệu quả hơn về không gian.


4
Chà, đó không phải là vấn đề. Hãy tạo một tệp khác liệt kê các giá trị và tìm kiếm giá trị bù. Trong thực tế, chúng tôi có thể tối ưu hóa điều này để tìm kiếm với btrees. Sau đó chúng tôi biết nơi để đọc các tập tin! Tiếp theo, tôi cho rằng chúng ta nên thêm một ngôn ngữ truy vấn khai báo vào chương trình nhỏ của chúng tôi có khả năng nối kết quả giữa các tệp được phân tách khác nhau và sau đó có thể tuân thủ ACID .... Tại sao, tại sao, tại sao lại sử dụng RDBMS? ;-)
Chris Travers

@ChrisTravers Đã ở đó, đã làm điều đó, và tôi hạnh phúc hơn nhiều khi sử dụng cơ sở dữ liệu.
BillThor

5
ý tưởng đã đi theo hướng "Những người không học từ UNIX được định sẵn để phát minh lại nó một cách tồi tệ."
Chris Travers

1

Tôi luôn thích đến các diễn đàn này và đọc tất cả các thông tin cơ sở dữ liệu nặng mà tập tin Hệ thống không thể thực hiện nhanh như Cơ sở dữ liệu. Trái lại, một cây được bố trí hợp lý, các hashtables được thiết kế tốt và lưu chúng dưới dạng đối tượng vào một tệp sẽ mang lại tốc độ tương tự như cơ sở dữ liệu và từ các thử nghiệm của tôi. Cây hashtable và thư mục được thiết kế đúng sẽ giành chiến thắng mọi lúc. Cách ít chi phí. Gần đây tôi đã chuyển khỏi lập trình hướng cơ sở dữ liệu và nhiều hơn nữa trên cây tệp để đơn giản và tính di động của chương trình. Không có DB có nghĩa là sao lưu dễ dàng chỉ cần nén cây của bạn lên và đi. Nó là rất tốt đẹp và một đề xuất để lập trình theo cách này cho khách hàng từng ngày với các ứng dụng nhỏ. Nhìn vào bức ảnh lớn tôi có thời gian để tự thiết kế hay chỉ tận dụng những gì đã có như db. Cá nhân tôi thích lưu các đối tượng của mình vào tệp và sử dụng chúng sau này chỉ cần theo dõi kích thước của các bảng của bạn và xem xét sử dụng RandomAccessFile để có thể nhanh chóng tìm kiếm nó như một cơ sở dữ liệu và chia nó thành các đối tượng có thể băm . Thưởng thức. Hãy nhớ những gì dữ liệu bạn lưu trữ trong tệp sẽ tiêu tốn gấp đôi mức sử dụng ghi nhớ tại các thời điểm tùy thuộc vào mã của bạn. Bảng băm chính nó và thường là nơi bạn tiêu thụ nó để xem.


3
Phản ứng thích hợp duy nhất cho điều này tôi có thể nghĩ là đây .
Mark Storey-Smith

3
@ MarkStorey-Smith, đó là một liên kết thú vị, nhưng liệu có phải là ngụ ý giải pháp này là nằm trên phổ Dunning-Kruger ở đâu đó không? :)
David Mann
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.