Lý do chính đáng KHÔNG sử dụng cơ sở dữ liệu quan hệ?


139

Bạn có thể vui lòng chỉ đến các công cụ lưu trữ dữ liệu thay thế và đưa ra lý do chính đáng để sử dụng chúng thay vì cơ sở dữ liệu quan hệ cũ không? Theo tôi, hầu hết các ứng dụng hiếm khi sử dụng toàn bộ sức mạnh của SQL - thật thú vị khi xem cách xây dựng một ứng dụng không có SQL.

Câu trả lời:


148

Các tệp văn bản thuần túy trong một hệ thống tệp

  • Rất đơn giản để tạo và chỉnh sửa
  • Người dùng dễ dàng thao tác với các công cụ đơn giản (ví dụ: trình soạn thảo văn bản, grep, v.v.)
  • Lưu trữ hiệu quả các tài liệu nhị phân

Các tệp XML hoặc JSON trên đĩa

  • Như trên, nhưng với một chút khả năng để xác nhận cấu trúc.

Tệp bảng tính / CSV

  • Mô hình rất dễ hiểu cho người dùng doanh nghiệp

Subversion (hoặc hệ thống kiểm soát phiên bản dựa trên đĩa tương tự)

  • Hỗ trợ rất tốt cho phiên bản dữ liệu

Berkeley DB (Về cơ bản, một hashtable dựa trên đĩa)

  • Về mặt khái niệm rất đơn giản (chỉ cần nhập / khóa)
  • Khá nhanh
  • Không có chi phí quản lý
  • Hỗ trợ giao dịch tôi tin

DB đơn giản của Amazon

  • Giống như Berkeley DB tôi tin, nhưng được lưu trữ

Kho dữ liệu công cụ ứng dụng của Google

  • Lưu trữ và có khả năng mở rộng cao
  • Mỗi tài liệu lưu trữ khóa-giá trị (tức là mô hình dữ liệu linh hoạt)

CouchDB

  • Tài liệu tập trung
  • Lưu trữ đơn giản dữ liệu dựa trên cấu trúc / tài liệu

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)

  • Tích hợp ngôn ngữ rất chặt chẽ

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ần thiết

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 .


10
Sẽ thật tuyệt nếu bạn cũng giải thích những hạn chế của mỗi lựa chọn, nếu không thì làm thế nào để chọn? Cảm ơn,
Sklivvz

4
Ngoài ra, việc viết hàng triệu hàng vào DB có thể mất một ngày trong khi nối thêm một triệu dòng nhật ký vào tệp chỉ mất vài phút. Tôi sẽ không bao giờ hiểu tại sao mọi người cứ khăng khăng đưa dữ liệu nhật ký vào cơ sở dữ liệu.
Aaron Digulla

33
Aaron: Tôi có một lý do: CHỌN tin nhắn TỪ nhật ký WHERE (ngày GIỮA 2009-01-01 VÀ 2009-03-01) VÀ gõ = 'error' AND system = 'windows' :) Bạn sẽ tải nó từ tệp văn bản như thế nào ?
Tomáš Fejfar

1
Tôi rất ủng hộ các tập tin văn bản bất cứ khi nào có thể. Bạn không thể luôn sử dụng chúng nhưng khi bạn có thể, họ sẽ dễ dàng chẩn đoán các vấn đề hơn.
Loren Pechtel

ber ở db chắc chắn có giao dịch. tệp văn bản và tệp xml / json thì không, vì vậy các ứng dụng đa luồng có thể dậm chân chúng nếu bạn không cẩn thận. Các tệp CSV rất tuyệt vời cho các bộ sưu tập các tham số vì người dùng doanh nghiệp có thể chỉ cần nhìn vào chúng và chỉnh sửa chúng mà không cần các công cụ bổ sung. Các tệp văn bản rất tốt cho các ứng dụng ghi một lần / đọc gần như không bao giờ như ghi nhật ký. Để chọn một cách tiếp cận, bạn cần tìm ra những gì bạn đang cố gắng thực hiện
O. Jones

26

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:

  1. Cấu trúc: nó rõ ràng vỡ thành nhiều mảnh, hoặc bạn đang thực hiện đánh đổi?
  2. Cách sử dụng: dữ liệu sẽ được phân tích / truy xuất / tìm kiếm như thế nào?
  3. Trọn đời: dữ liệu có ích bao lâu?
  4. Kích thước: có bao nhiêu dữ liệu?

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".


5
Một nguy cơ của các tệp CSV là thoát cần phải được thực hiện ngay; thật dễ dàng để thực hiện một trình đọc hoặc trình ghi CSV không thực sự tuân theo thông số kỹ thuật vì nó trông rất đơn giản và có một vài sự tinh tế: en.wikipedia.org/wiki/Comma-separated_values#Specification
Jared Updike

10

Hệ thống tập tin tiện dụng để lưu trữ dữ liệu nhị phân, không bao giờ hoạt động tốt trong cơ sở dữ liệu quan hệ.



6

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.


1
Bạn có thể cho một ví dụ tại sao / khi không cần ACID không?
Ivan Voroshilin

1
@vibneiro, nếu cơ sở dữ liệu chỉ có một người dùng duy nhất hoạt động tuần tự hoặc có nguy cơ không thống nhất cơ sở dữ liệu trong trường hợp mất điện có thể chấp nhận được hoặc không áp dụng khái niệm giao dịch cơ sở dữ liệu hoặc không cần ràng buộc, Các tầng, trình kích hoạt hoặc tương tự, sau đó nhà cung cấp không phải RIDMS không phải ACID (ví dụ: tệp văn bản có API giống RDBMS) có thể đủ. Ví dụ: ứng dụng của bạn có thể giữ một cơ sở dữ liệu về các thông báo chẩn đoán lịch sử mà ACID hoàn toàn không liên quan và "log.txt" sẽ đủ.
bzlm

Hóa ra ACID không cần thiết trong những trường hợp rất hiếm. Tôi tự hỏi tại sao cơ sở dữ liệu NoQuery lại phổ biến đến vậy? Phần lớn trong số họ không hỗ trợ ACIDity đầy đủ.
Ivan Voroshilin

@vibneiro, NoQuery thường dễ dàng hơn, nhẹ hơn, dễ nhúng hơn, dễ lưu trữ hơn, trực quan hơn, linh hoạt hơn và thường có một số ACID. Nếu bạn không có dữ liệu quan hệ, RDBMS có thể không phải là thứ bạn cần.
bzlm

6

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

http://www.hdfgroup.org/

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.


4

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


4
Tại sao dữ liệu cơ sở không cho vay chính nó cho mô hình quan hệ?
kaybenleroll

3

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.


3

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


3

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.


2
Nó được sử dụng đến mức khó tin mà bạn cần một người khách hàng Smalltalk sử dụng đá quý / S (cho các ứng dụng máy tính để bàn) nhưng với các khuôn khổ web Aida ( aidaweb.si ), và Seaside ( seaside.st ) Gemstone / S có thể được sử dụng trực tiếp như một ứng dụng người phục vụ. Xem thông tin trên GLASS ( seaide.gemstone.com )
Dale Henrichs

Một lý do khác sẽ là nếu bạn quan tâm đến chất lượng dữ liệu. Trong một 3MB như Gemstone, việc thực thi các quy tắc hợp lệ phức tạp sẽ dễ dàng hơn nhiều.
Stephan Eggermont

Khả năng truy vấn đặc biệt của OODBMS tốt hơn nhiều so với RDBMS-es dựa trên SQL
Stephan Eggermont

1

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.


1

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


1

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.


1

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.


BTrees là việc thực hiện cơ bản của các chỉ số bình thường. Oracle hỗ trợ các bảng có tổ chức Index chỉ là một bảng được triển khai dưới dạng chỉ mục. Chúng nhanh hơn để đọc, chậm hơn để viết và sử dụng cây B. Xem: < oracle.com/tĩ/products/oracle9i/datasheets/iots/iêu >
borjab

1

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.


1

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ì


1

Đị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".


1

KISS: Giữ cho nó nhỏ và đơn giản


1
Đó là phiên bản lịch sự ... Tôi thường nghe thấy "Hãy đơn giản, ngu ngốc" ... hoặc, ừm, có lẽ đó chỉ là những gì mọi người nói với tôi! :-(
GreenMatt

1

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 :)


0

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 .


0

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ì:

  • Ngôn ngữ được thiết kế như một ngôn ngữ mô tả dữ liệu để bắt đầu
  • Cú pháp là con người có thể đọc được (XML thì không )
  • Người ta có thể biên dịch các khối Lua thành nhị phân, để tăng hiệu suất

Đâ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.


Lua là một ngôn ngữ lập trình. Gợi ý này có thể được khái quát hóa để đề xuất bất kỳ tính năng lưu giữ / tuần tự hóa nào của bất kỳ ngôn ngữ lập trình nào (ví dụ: pickle / Shelve trong Python, hoặc JSON / YAML cho Perl et al, v.v.). Điều này không giải quyết đồng thời truy cập và đảm bảo ACID.
Jim Dennis

Bạn đúng. Điều còn thiếu từ mục nhập của tôi là bản chất chỉ đọc ngụ ý của việc sử dụng đó. Trong kịch bản như vậy tôi giữ cho văn bản của tôi. Đối với việc đọc-viết của Lua theo cách này hoàn toàn không có ý nghĩa. Nhiều thứ, sa siêu dữ liệu hệ thống tập tin hầu hết chỉ đọc nên cách tiếp cận như vậy không có nghĩa là yêu cầu ro hoàn chỉnh.
akauppi
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.