Có vẻ như bạn đã đưa ra một quyết định kỹ thuật lưu trữ dữ liệu ngắn hạn về cơ bản cho ứng dụng của mình - bạn đã chọn viết một công cụ quản lý cửa hàng dữ liệu tùy chỉnh.
Bạn đang ngồi liên tục, với các tùy chọn để di chuyển theo một trong hai hướng.
Về lâu dài, bạn sẽ có khả năng (gần như, nhưng không chắc chắn 100%) thấy mình gặp rắc rối và có thể tốt hơn để thay đổi sang sử dụng các giải pháp lưu trữ dữ liệu hiện có. Có những vấn đề hiệu suất cụ thể, rất phổ biến, có thể dự đoán được, bạn sẽ buộc phải giải quyết, và tốt hơn hết là bạn nên sử dụng các công cụ hiện có thay vì tự lăn.
Có vẻ như bạn đã viết một cơ sở dữ liệu mục đích tùy chỉnh (nhỏ), được ứng dụng của bạn tích hợp và sử dụng trực tiếp. Tôi giả sử bạn đang dựa vào một hệ điều hành và hệ thống tệp để quản lý việc đọc và đọc đĩa thực tế và coi sự kết hợp này như một kho lưu trữ dữ liệu.
Khi nào làm những gì bạn đã làm
Bạn đang ngồi ở một điểm ngọt để lưu trữ dữ liệu. Một hệ thống lưu trữ dữ liệu hệ điều hành và tệp rất tiện lợi, dễ truy cập và đa nền tảng di động. Sự kết hợp đã tồn tại quá lâu, mà bạn chắc chắn sẽ được hỗ trợ và chạy ứng dụng của bạn, trên hầu hết mọi cấu hình triển khai tiêu chuẩn.
Đây cũng là một sự kết hợp dễ dàng để viết mã cho - API khá đơn giản và cơ bản và phải mất tương đối ít dòng mã để làm cho nó hoạt động.
Nói chung, thật lý tưởng để làm những gì bạn đã làm khi:
- Tạo mẫu ý tưởng mới
- Xây dựng các ứng dụng rất khó có khả năng cần mở rộng, hiệu suất khôn ngoan
- Bị hạn chế bởi các trường hợp bất thường, chẳng hạn như thiếu tài nguyên để cài đặt cơ sở dữ liệu
Lựa chọn thay thế
Bạn đang tiếp tục các tùy chọn và có hai "hướng" bạn có thể đi từ đây, những gì tôi nghĩ là "xuống" và "lên":
Xuống
Đây là tùy chọn ít khả năng nhất để áp dụng, nhưng nó ở đây vì mục đích hoàn chỉnh:
Bạn có thể, nếu bạn muốn, đi xuống , nghĩa là bỏ qua hệ điều hành và hệ thống tập tin hoàn toàn và thực sự viết và đọc trực tiếp từ đĩa. Lựa chọn này thường chỉ phù hợp trong trường hợp cần hiệu quả cực cao - ví dụ, nghĩ về một thiết bị máy nghe nhạc MP3 tối thiểu / nhỏ , không có đủ RAM cho một hệ điều hành đầy đủ chức năng, hoặc một cái gì đó như Wayback Machine , đòi hỏi khối lượng cực kỳ hiệu quả hoạt động ghi dữ liệu (hầu hết các cửa hàng dữ liệu đánh đổi việc ghi chậm hơn để đọc nhanh hơn, vì đó là trường hợp sử dụng phổ biến hơn nhiều cho hầu hết các ứng dụng).
Lên
Có một số loại phụ ở đây - mặc dù vậy, chúng không hoàn toàn độc quyền. Một số công cụ mở rộng cả hai, cung cấp một số chức năng trong mỗi công cụ, một số công cụ hoàn toàn có thể chuyển từ làm việc ở chế độ này sang chế độ khác và một số công cụ có thể được xếp chồng lên nhau, cung cấp chức năng khác nhau cho các phần khác nhau của ứng dụng.
Lưu trữ dữ liệu mạnh hơn
Bạn có thể thấy mình cần lưu trữ khối lượng dữ liệu cao hơn và cao hơn, trong khi vẫn dựa vào ứng dụng của riêng bạn để quản lý độ phức tạp thao tác dữ liệu. Toàn bộ các cửa hàng khóa-giá trị có sẵn cho bạn, với nhiều mức hỗ trợ khác nhau cho các chức năng liên quan. Các công cụ NoQuery rơi vào danh mục này, cũng như các công cụ khác.
Đây là đường dẫn rõ ràng để mở rộng quy mô khi phần sau mô tả ứng dụng của bạn:
- Nó là phụ thuộc đọc nặng bất thường
- Bạn có thể giao dịch với hiệu suất cao hơn để đảm bảo tính nhất quán (ngắn hạn) thấp hơn (nhiều ưu đãi mang lại "tính nhất quán cuối cùng").
- Là "trực tiếp" quản lý hầu hết các thao tác dữ liệu và thiếu tính nhất quán (trong thực tế, ban đầu bạn có thể sẽ sử dụng công cụ của bên thứ ba, mặc dù cuối cùng bạn sẽ đưa ứng dụng này vào ứng dụng của bạn hoặc vào lớp trung gian bằng văn bản tùy chỉnh) .
- Bạn đang tìm cách mở rộng quy mô số lượng dữ liệu bạn đang lưu trữ và / hoặc khả năng tìm kiếm thông qua dữ liệu đó với các yêu cầu thao tác dữ liệu "tương đối đơn giản".
Có một số phòng ngọ nguậy ở đây - bạn có thể buộc tính nhất quán đọc tốt hơn, để đọc chậm hơn. Các công cụ và tùy chọn khác nhau cung cấp apis thao tác dữ liệu, lập chỉ mục và các tùy chọn khác, có thể ít nhiều phù hợp để dễ dàng viết ứng dụng cụ thể của bạn. Vì vậy, nếu các điểm trên gần như mô tả hoàn toàn ứng dụng của bạn, bạn có thể "đủ gần" để làm việc với giải pháp lưu trữ dữ liệu mạnh hơn.
Các ví dụ nổi tiếng: CouchDB , MongoDB , Redis , các giải pháp lưu trữ đám mây như Azure của Microsoft , Kho dữ liệu ứng dụng của Google và ECE của Amazon.
Công cụ thao tác dữ liệu phức tạp hơn
Nhóm ứng dụng lưu trữ dữ liệu "SQL", cũng như một loạt các ứng dụng khác, được mô tả tốt hơn như các công cụ thao tác dữ liệu, hơn là các công cụ lưu trữ thuần túy. Chúng cung cấp một loạt các chức năng bổ sung, ngoài việc lưu trữ dữ liệu và thường vượt ra ngoài những gì có sẵn trong kho lưu trữ khóa-giá trị của mọi thứ. Bạn sẽ muốn đi theo con đường này khi:
- Bạn hoàn toàn phải có tính nhất quán khi đọc, ngay cả khi điều đó có nghĩa là bạn sẽ đạt được thành tích.
- Bạn đang tìm cách thực hiện hiệu quả thao tác dữ liệu rất phức tạp - hãy nghĩ đến các hoạt động THAM GIA và CẬP NHẬT rất phức tạp, các khối dữ liệu và cắt, v.v ...
- Bạn ổn với việc giảm bớt độ cứng cho hiệu năng (nghĩ rằng các định dạng lưu trữ dữ liệu cố định, bị ép buộc, chẳng hạn như bảng, không thể dễ dàng và / hoặc thay đổi hiệu quả).
- Bạn có các tài nguyên để đối phó với một bộ công cụ và giao diện phức tạp hơn gấp nhiều lần.
Đây là cách suy nghĩ "truyền thống" hơn về cơ sở dữ liệu hoặc lưu trữ dữ liệu và đã tồn tại lâu hơn nhiều - vì vậy có rất nhiều thứ có sẵn ở đây và thường có rất nhiều vấn đề phức tạp để giải quyết. Mặc dù có thể cần một số kiến thức và kiến thức chuyên môn và xây dựng các giải pháp đơn giản / tránh nhiều sự phức tạp - rất có thể bạn sẽ sử dụng các công cụ và thư viện của bên thứ ba để quản lý hầu hết các giải pháp đó cho bạn.
Các ví dụ nổi tiếng là MySQL , SQL Server , Cơ sở dữ liệu của Oracle và DB2 .
Thuê ngoài công việc
Có một số công cụ và thư viện của bên thứ ba hiện đại, tự xen kẽ giữa các công cụ lưu trữ dữ liệu và ứng dụng của bạn, để giúp bạn quản lý sự phức tạp.
Ban đầu, họ cố gắng lấy đi hầu hết hoặc tất cả các công việc quản lý và thao túng các cửa hàng dữ liệu, và, lý tưởng nhất, cho phép bạn thực hiện chuyển đổi suôn sẻ thành phức tạp chỉ khi và nếu cần. Đây là một lĩnh vực hoạt động của tinh thần kinh doanh và nghiên cứu, với một vài kết quả gần đây có thể truy cập ngay lập tức và có thể sử dụng được.
Các ví dụ nổi tiếng là các công cụ MVC ( Django , Yii ), Ruby on Rails và Datomic . Thật khó để công bằng ở đây vì có hàng tá công cụ và thư viện hoạt động như các trình bao bọc xung quanh API của các cửa hàng dữ liệu khác nhau.
Tái bút: nếu bạn thích video hơn văn bản, bạn có thể muốn xem một số video liên quan đến cơ sở dữ liệu của Rich Hickey; anh ấy làm tốt công việc làm sáng tỏ hầu hết những suy nghĩ đi vào việc lựa chọn, thiết kế và sử dụng một kho lưu trữ dữ liệu.