Câu trả lời:
Các tệp văn bản thuần túy trong một hệ thống tệp
Các tệp XML hoặc JSON trên đĩa
Tệp bảng tính / CSV
Subversion (hoặc hệ thống kiểm soát phiên bản dựa trên đĩa tương tự)
Berkeley DB (Về cơ bản, một hashtable dựa trên đĩa)
Kho dữ liệu công cụ ứng dụng của Google
Bộ sưu tập ngôn ngữ bản địa (được lưu trữ trong bộ nhớ hoặc tuần tự trên đĩa)
Công cụ lưu trữ tùy chỉnh (viết tay)
Tôi không thể yêu cầu biết bất cứ điều gì nhiều về họ, nhưng bạn cũng có thể muốn xem xét các hệ thống cơ sở dữ liệu đối tượng .
Câu trả lời của Matt Sheppard là tuyệt vời (mod lên), nhưng tôi sẽ tính đến các yếu tố này khi nghĩ về một trục chính:
Một lợi thế đặc biệt của các tệp CSV so với RDBMS là chúng có thể dễ dàng ngưng tụ và di chuyển thực tế đến bất kỳ máy nào khác. Chúng tôi thực hiện chuyển dữ liệu lớn và mọi thứ đủ đơn giản, chúng tôi chỉ cần sử dụng một tệp CSV lớn và dễ dàng tạo tập lệnh bằng các công cụ như rsync. Để giảm sự lặp lại trên các tệp CSV lớn, bạn có thể sử dụng một cái gì đó như YAML . Tôi không chắc chắn tôi sẽ lưu trữ bất cứ thứ gì như JSON hoặc XML, trừ khi bạn có các yêu cầu quan hệ quan trọng.
Theo như các lựa chọn thay thế không được đề cập, đừng giảm giá Hadoop , đây là một triển khai nguồn mở của MapReduce. Điều này sẽ hoạt động tốt nếu bạn có TON dữ liệu có cấu trúc lỏng lẻo cần phân tích và bạn muốn ở trong một kịch bản mà bạn chỉ cần thêm 10 máy nữa để xử lý dữ liệu.
Ví dụ, tôi bắt đầu cố gắng phân tích hiệu suất mà về cơ bản là tất cả các số thời gian của các chức năng khác nhau được ghi lại trên khoảng 20 máy. Sau khi thử gắn mọi thứ vào RDBMS, tôi nhận ra rằng tôi thực sự không cần phải truy vấn lại dữ liệu một khi tôi đã tổng hợp nó. Và, nó chỉ hữu ích trong định dạng tổng hợp của nó đối với tôi. Vì vậy, tôi giữ các tệp nhật ký xung quanh, nén và sau đó để dữ liệu tổng hợp trong DB.
Lưu ý Tôi quen với việc suy nghĩ với kích thước "lớn".
Hãy thử Prevayler: http://www.prevayler.org/wiki/ Prevayler là thay thế cho RDBMS. Trong trang web có thêm thông tin.
Nếu bạn không cần ACID , có lẽ bạn không cần chi phí hoạt động của RDBMS. Vì vậy, xác định xem bạn cần điều đó đầu tiên. Hầu hết các câu trả lời không phải RDBMS được cung cấp ở đây không cung cấp ACID.
Công cụ lưu trữ tùy chỉnh (viết tay) / Hiệu suất rất cao trong các trường hợp sử dụng được yêu cầu
Nếu bạn có bộ dữ liệu khổng lồ, thay vì tự cuộn, bạn có thể sử dụng HDF, Định dạng dữ liệu phân cấp.
http://en.wikipedia.org/wiki/HVELical_Data_Format :
HDF hỗ trợ một số mô hình dữ liệu khác nhau, bao gồm mảng nhiều chiều, hình ảnh raster và bảng.
Nó cũng được phân cấp như một hệ thống tệp, nhưng dữ liệu được lưu trữ trong một tệp nhị phân ma thuật.
HDF5 là bộ phần mềm giúp quản lý các bộ sưu tập dữ liệu cực kỳ lớn và phức tạp.
Hãy nghĩ về petabyte dữ liệu viễn thám của NASA / JPL.
Ngày mai
Một trường hợp mà tôi có thể nghĩ đến là khi dữ liệu bạn đang lập mô hình không thể được trình bày dễ dàng trong cơ sở dữ liệu quan hệ.
Một khi ví dụ như vậy là cơ sở dữ liệu được sử dụng bởi các nhà khai thác điện thoại di động để giám sát và kiểm soát các trạm cơ sở cho các mạng điện thoại di động.
Tôi gần như tất cả các trường hợp này, một OO DB được sử dụng, hoặc là một sản phẩm thương mại hoặc một hệ thống tự cuộn cho phép gia truyền các đối tượng.
Tôi đã làm việc trên một ứng dụng giám sát 3G cho một công ty lớn, người sẽ không tên, nhưng logo của họ là vết rượu vang đỏ (-: và họ đã sử dụng DB OO đó để theo dõi tất cả các thuộc tính khác nhau cho từng ô riêng lẻ trong mạng.
Việc thẩm vấn các DB như vậy được thực hiện bằng cách sử dụng các kỹ thuật độc quyền, thông thường, hoàn toàn không có SQL.
HTH.
chúc mừng
Cướp
Cơ sở dữ liệu đối tượng không phải là cơ sở dữ liệu quan hệ. Chúng có thể thực sự tiện dụng nếu bạn chỉ muốn nhét một số đối tượng vào cơ sở dữ liệu. Chúng cũng hỗ trợ phiên bản và sửa đổi các lớp cho các đối tượng đã tồn tại trong cơ sở dữ liệu. db4o là cái đầu tiên xuất hiện trong đầu.
Trong một số trường hợp (ví dụ: dữ liệu thị trường tài chính và kiểm soát quy trình), bạn có thể cần phải sử dụng cơ sở dữ liệu thời gian thực thay vì RDBMS. Xem liên kết wiki
Có một công cụ RAD được gọi là JADE được viết cách đây vài năm, có tích hợp bộ công cụ 3MBMS. Các hóa thân trước đó của công cụ DB cũng hỗ trợ Digitalk Smalltalk. Nếu bạn muốn lấy mẫu xây dựng ứng dụng bằng cách sử dụng mô hình không phải RDBMS thì đây có thể là một sự khởi đầu.
Các sản phẩm khác của OODBMS bao gồm Objectivity , GemStone (Bạn sẽ cần có VisualWorks Smalltalk để chạy phiên bản Smalltalk nhưng cũng có phiên bản java). Ngoài ra còn có một số dự án nghiên cứu nguồn mở trong không gian này - EXODUS và SHORE hậu duệ của nó xuất hiện trong tâm trí.
Đáng buồn thay, khái niệm này dường như chết một cái chết, có lẽ là do thiếu tiêu chuẩn rõ ràng và khả năng truy vấn đặc biệt tương đối kém so với các hệ thống RDMBS dựa trên SQL.
Một OODBMS phù hợp nhất cho các ứng dụng có cấu trúc dữ liệu cốt lõi được biểu diễn tốt nhất dưới dạng biểu đồ của các nút được kết nối với nhau. Tôi đã từng nói rằng ứng dụng OODBMS tinh túy là một Dungeon nhiều người dùng (MUD) trong đó các phòng sẽ chứa avatar của người chơi và các đối tượng khác.
Bạn có thể đi một chặng đường dài chỉ bằng cách sử dụng các tệp được lưu trữ trong hệ thống tệp. Các RDBMS đang trở nên tốt hơn trong việc xử lý các đốm màu, nhưng đây có thể là một cách tự nhiên để xử lý dữ liệu hình ảnh và tương tự, đặc biệt nếu các truy vấn đơn giản (liệt kê và chọn các mục riêng lẻ.)
Những thứ khác không phù hợp lắm trong RDBMS là cấu trúc dữ liệu phân cấp và tôi đoán dữ liệu không gian địa lý và mô hình 3D không dễ dàng để làm việc với cả hai.
Các dịch vụ như Amazon S3 cung cấp các mô hình lưu trữ đơn giản hơn (khóa-> giá trị) không hỗ trợ SQL. Khả năng mở rộng là chìa khóa đó.
Các tệp Excel cũng có thể hữu ích, đặc biệt nếu người dùng cần có khả năng thao tác dữ liệu trong một môi trường quen thuộc và xây dựng một ứng dụng đầy đủ để làm điều đó không khả thi.
Có một số lượng lớn cách lưu trữ dữ liệu - thậm chí "cơ sở dữ liệu quan hệ" bao gồm một loạt các lựa chọn thay thế từ một thư viện mã đơn giản thao túng một tệp cục bộ (hoặc tệp) như thể nó là một cơ sở dữ liệu quan hệ trên một cơ sở người dùng, thông qua các hệ thống dựa trên tệp có thể xử lý nhiều người dùng để lựa chọn rộng rãi các hệ thống dựa trên "máy chủ" nghiêm túc.
Chúng tôi sử dụng các tệp XML rất nhiều - bạn có được dữ liệu có cấu trúc tốt, các công cụ tuyệt vời để truy vấn cùng khả năng thực hiện các chỉnh sửa nếu phù hợp, thứ gì đó có thể đọc được và bạn không phải lo lắng về công cụ db hoạt động (hoặc hoạt động của công cụ db). Điều này hoạt động tốt cho những thứ chủ yếu chỉ đọc (trong trường hợp của chúng tôi thường xuyên hơn là không được tạo từ db ở nơi khác) và cho cả các hệ thống người dùng đơn lẻ, nơi bạn có thể tải dữ liệu vào và lưu nó theo yêu cầu - nhưng bạn đang tạo cơ hội cho các vấn đề nếu bạn muốn chỉnh sửa nhiều người dùng - ít nhất là một tệp.
Đối với chúng tôi đó là về điều đó - chúng tôi sẽ sử dụng một cái gì đó sẽ tạo SQL (MS cung cấp một bộ công cụ chạy từ .DLL để thực hiện công cụ người dùng đơn lẻ cho đến máy chủ doanh nghiệp và tất cả đều nói cùng một SQL (với các giới hạn ở cấp thấp hơn)) hoặc chúng tôi sẽ sử dụng XML làm định dạng vì (đối với chúng tôi) tính dài dòng hiếm khi là một vấn đề.
Hiện tại chúng tôi không phải thao tác dữ liệu nhị phân trong các ứng dụng của mình để câu hỏi không xuất hiện.
Murph
Mọi người có thể muốn xem xét việc sử dụng máy chủ LDAP thay cho cơ sở dữ liệu SQL truyền thống nếu dữ liệu ứng dụng chủ yếu theo định hướng khóa / giá trị và phân cấp.
Các tệp BTree thường nhanh hơn nhiều so với cơ sở dữ liệu quan hệ. SQLite chứa bên trong nó một thư viện BTree thuộc phạm vi công cộng (như trong 'miền công cộng' thực sự, không sử dụng thuật ngữ một cách lỏng lẻo).
Thành thật mà nói, nếu tôi muốn có một hệ thống nhiều người dùng, tôi sẽ cần rất nhiều sự thuyết phục để không sử dụng một cơ sở dữ liệu quan hệ máy chủ phong nha.
Cơ sở dữ liệu toàn văn, có thể được truy vấn với các toán tử vùng lân cận, chẳng hạn như "trong vòng 10 từ", v.v.
Cơ sở dữ liệu quan hệ là một công cụ kinh doanh lý tưởng cho nhiều mục đích - đủ dễ hiểu và thiết kế, đủ nhanh, đầy đủ ngay cả khi chúng không được thiết kế và tối ưu hóa bởi một thiên tài có thể "sử dụng toàn bộ sức mạnh", v.v.
Nhưng một số mục đích kinh doanh yêu cầu lập chỉ mục toàn văn bản, mà các công cụ quan hệ không cung cấp hoặc giải quyết như một suy nghĩ sau. Đặc biệt, các lĩnh vực pháp lý và y tế có một lượng lớn văn bản phi cấu trúc để lưu trữ và lội qua.
Ngoài ra: * Các kịch bản được nhúng - Trường hợp thường bắt buộc phải sử dụng một cái gì đó nhỏ hơn thì RDBMS chính thức. Db4o là một ODB có thể dễ dàng sử dụng trong trường hợp đó. * Phát triển nhanh chóng hoặc bằng chứng về khái niệm - nơi bạn muốn tập trung vào doanh nghiệp và không lo lắng về lớp kiên trì
Định lý CAP giải thích nó ngắn gọn. SQL chủ yếu cung cấp "Tính nhất quán mạnh mẽ: tất cả các khách hàng đều nhìn thấy cùng một quan điểm, ngay cả khi có các bản cập nhật".
Tôi sẽ cung cấp RDBMS :) Nếu bạn không gặp rắc rối với việc thiết lập / quản trị, hãy tìm SQLite. Được xây dựng trong RDBMS với sự hỗ trợ SQL đầy đủ. Nó thậm chí cho phép bạn lưu trữ bất kỳ loại dữ liệu trong bất kỳ cột.
Lợi thế chính so với tệp nhật ký ví dụ: Nếu bạn có một tệp lớn, bạn sẽ tìm kiếm nó như thế nào? Với công cụ SQL, bạn chỉ cần tạo chỉ mục và tăng tốc hoạt động đáng kể.
Về tìm kiếm toàn văn bản: SQLite cũng có các mô-đun để tìm kiếm toàn văn bản ..
Chỉ cần tận hưởng giao diện chuẩn đẹp với dữ liệu của bạn :)
Một lý do chính đáng để không sử dụng cơ sở dữ liệu quan hệ là khi bạn có một bộ dữ liệu lớn và muốn xử lý song song và xử lý phân tán trên dữ liệu. Chỉ số web của Google sẽ là một ví dụ hoàn hảo cho trường hợp như vậy.
Hadoop cũng có một triển khai Hệ thống tệp của Google được gọi là Hệ thống tệp phân tán Hadoop .
Tôi thực sự muốn giới thiệu Lua như một giải pháp thay thế cho SQLite - loại lưu trữ dữ liệu.
Bởi vì:
Đây là tùy chọn "bộ sưu tập ngôn ngữ bản địa" của câu trả lời được chấp nhận. Nếu bạn đang sử dụng C / C ++ làm cấp độ ứng dụng, việc ném vào công cụ Lua (100kB nhị phân) là hoàn toàn hợp lý chỉ vì mục đích đọc cấu hình / dữ liệu hoặc viết chúng ra.