2012-06-21 22 views
5

Chúng tôi đang thiết kế bản cập nhật cho hệ thống hiện tại (C++ \ CLI và C#). Hệ thống sẽ thu thập một lượng dữ liệu nhỏ (~ 1Mb) từ ~ 10K thiết bị (trong tương lai gần). Hiện tại, chúng được sử dụng để lưu dữ liệu thiết bị trong một CSV (một bảng) và lưu trữ tất cả các dữ liệu này trong một cấu trúc thư mục rộng.Cơ sở dữ liệu SQL VS. Nhiều tệp phẳng (Hàng nghìn tệp CSV nhỏ)

Dữ liệu chỉ được chèn (tạo/thêm vào một tệp, tạo thư mục) không bao giờ được cập nhật/xóa. Xử lý dữ liệu được thực hiện bằng cách đọc nhiều tệp CSV cho một chương trình bên ngoài (như Matlab). Chủ yếu được sử dụng để phân tích thống kê.

Có một tùy chọn để bắt đầu lưu dữ liệu này vào cơ sở dữ liệu MS-SQL. Thời gian xử lý (đọc CSV của chương trình bên ngoài) có thể lên tới vài phút.

  • Chúng ta nên chọn phương pháp nào để sử dụng?
  • Một trong những phương pháp có lưu trữ nhiều hơn đáng kể so với phương pháp kia không?
  • Nói chung, khi đọc dữ liệu thô từ cơ sở dữ liệu trở nên nhanh hơn việc đọc dữ liệu của CSV? (10 tệp, 100 tệp? ...)

Tôi đánh giá cao câu trả lời của bạn, Ưu và khuyết điểm được hoan nghênh.

Cảm ơn bạn đã dành thời gian.

+0

Đây là một trong những câu hỏi mà bạn chỉ có thể trả lời bằng cách dùng thử. – Gabe

+0

Bạn cũng có thể xem xét sử dụng cơ sở dữ liệu noSQL. – HLGEM

Trả lời

3

Vâng, nếu bạn đang sử dụng dữ liệu trong một CSV để lấy dữ liệu trong CSV khác, tôi đoán rằng SQL Server sẽ nhanh hơn bất kỳ thứ gì bạn đã đưa ra. Tôi nghi ngờ SQL Server sẽ nhanh hơn trong hầu hết các trường hợp, nhưng tôi không thể nói chắc chắn. Microsoft đã đặt rất nhiều tài nguyên vào việc tạo một DBMS thực hiện chính xác những gì bạn đang cố gắng làm.

Dựa trên mô tả của bạn, có vẻ như bạn đã tạo hầu hết DBMS của riêng mình dựa trên dữ liệu bảng và cấu trúc thư mục. Tôi nghi ngờ rằng nếu bạn chuyển sang sử dụng SQL Server, bạn có thể sẽ tìm thấy một số lĩnh vực mà mọi thứ nhanh hơn và dễ dàng hơn.

Ưu điểm có thể xảy ra:

  • nhanh hơn truy cập
  • Dễ quản lý
  • dễ dàng hơn để mở rộng bạn nên cần phải
  • dễ dàng hơn để thực thi toàn vẹn dữ liệu
  • dễ dàng hơn để thiết kế các mối quan hệ phức tạp hơn

Có thể có:

  • Bạn sẽ phải viết lại mã hiện tại của bạn để sử dụng SQL Server thay vì hệ thống hiện tại của bạn
  • Bạn có thể phải trả cho SQL Server, bạn sẽ phải kiểm tra để xem nếu bạn có thể sử dụng nhanh

Chúc bạn may mắn!

+0

Một trong những lợi thế lớn nhất mà tôi thấy đối với tệp CSV là bạn có thể dễ dàng chỉnh sửa và chỉnh sửa nó một cách dễ dàng. Bạn có thể làm tương tự trong SQL Server, nhưng bạn cần phải có một bản sao của studio quản lý và biết cách thực sự * chỉnh sửa * dữ liệu. –

+0

Đúng. Quản lý studio là khá dễ dàng để có được hang mặc dù, và họ cung cấp hoàn toàn giao diện người dùng dựa trên cách chỉnh sửa dữ liệu. –

+0

Đồng ý. Đối với người dùng doanh nghiệp thông thường, việc chỉnh sửa CSV có thể dễ dàng hơn. Nhưng từ những âm thanh của nó không có vẻ là một vấn đề. –

0

Đây là câu hỏi mà nhiều khách hàng của chúng tôi có nơi tôi làm việc. Trừ khi bạn cần tệp phẳng cho một cơ sở hạ tầng hiện có, hoặc bạn không nghĩ rằng bạn có thể tìm ra SQL Server, hoặc nếu bạn chỉ có một vài tệp với lượng dữ liệu nhỏ để quản lý, bạn sẽ tốt hơn với SQL Server.

0

Nếu bạn có tùy chọn sử dụng cơ sở dữ liệu ms-sql, tôi sẽ làm điều đó.

Việc duy trì dữ liệu trong cấu trúc thư mục rộng không bao giờ là ý tưởng hay. Đọc dữ liệu của bạn sẽ liên quan đến việc đọc một số tệp. Đây có thể được lưu trữ bất cứ nơi nào trên đĩa của bạn. Thời gian tập tin của bạn sẽ khá cao. SQL server là một cơ sở dữ liệu sản xuất có những vấn đề này đã được chăm sóc.

Bạn đang phát minh lại bánh xe ở đây. Đây là cách foxpro quản lý dữ liệu, một tệp cho mỗi bảng. Nó thường là một ý tưởng tốt để sử dụng công nghệ đã được chứng minh, trừ khi bạn đang thực sự làm cho một máy chủ cơ sở dữ liệu.

Tôi không có bất kỳ thống kê thử nghiệm nào ở đây, nhưng đọc một số tệp sẽ hầu như luôn chậm hơn cơ sở dữ liệu nếu bạn đang xử lý bất kỳ lượng dữ liệu đáng kể nào. Với khoảng 10k thiết bị của bạn, bạn nên cân nhắc sử dụng cơ sở dữ liệu tiêu chuẩn.

1

Tôi muốn thử đánh các câu hỏi đó một chút.

Khi đọc dữ liệu thô từ cơ sở dữ liệu trở thành nhanh hơn đọc CSV? (10 tệp, 100 tệp? ...)

Ngay lập tức. Cơ sở dữ liệu được tối ưu hóa (giả sử bạn đã thực hiện bài tập về nhà của bạn) để đọc dữ liệu với tốc độ đáng kinh ngạc.

Một trong những phương pháp có lưu trữ nhiều hơn đáng kể so với khác không?

Cho đến khi bạn lên trong hàng chục nghìn tệp, có thể nó sẽ không tạo ra quá nhiều sự khác biệt. Không gian rẻ, phải không? Tuy nhiên, một khi bạn tham gia vào các giải đấu lớn, bạn sẽ nhận thấy rằng DB đang chiếm rất nhiều không gian.

Chúng ta nên chọn phương pháp nào để sử dụng?

Câu hỏi hay. Mọi thứ trong cơ sở dữ liệu luôn trở lại với khả năng mở rộng. Nếu bạn chỉ có một tệp CSV duy nhất để đọc, bạn sẽ tốt để đi. Không yêu cầu DB. Thậm chí hàng chục, không có vấn đề gì.

Dường như bạn có thể kết thúc ở vị trí mà bạn mở rộng đến mức bạn chắc chắn sẽ muốn động cơ DB phía sau dữ liệu của bạn khá nhanh chóng. Khi nghi ngờ, việc tạo cơ sở dữ liệu là đặt cược an toàn, vì bạn vẫn có thể truy vấn giá trị 100 GB dữ liệu đó trong một giây.