Hướng dẫn mongodb store historical data - mongodb lưu trữ dữ liệu lịch sử
Giả sử tôi có một người dùng có ID và tôi muốn lưu trữ một bản ghi lịch sử (tài liệu) trên người dùng này mỗi ngày, điều gì tốt hơn: Show
Chủ yếu tôi chỉ muốn truy xuất tài liệu hiện tại cho người dùng nhưng tất cả các bản ghi phải được truy cập bất cứ lúc nào mà không cần tìm kiếm/truy vấn siêu dài.
Hỏi ngày 25 tháng 1 năm 2012 lúc 16:54Jan 25, 2012 at 16:54
2 Có rất nhiều biến số có thể ảnh hưởng đến quyết định như vậy. Một tài liệu lớn dường như rõ ràng nhất với điều kiện nó không phát triển đến kích thước không thực tế hoặc thậm chí không được phép (nhớ bạn, một tài liệu có thể có kích thước tối đa 16MB). Sử dụng tài liệu trên mỗi mục nhập cũng hoàn toàn khả thi và miễn là bạn tạo các chỉ mục thích hợp sẽ không dẫn đến các truy vấn chậm. Đã trả lời ngày 25 tháng 1 năm 2012 lúc 17:02Jan 25, 2012 at 17:02
Remon van vlietremon van vlietRemon van Vliet 18.1k3 Huy hiệu vàng50 Huy hiệu bạc56 Huy hiệu Đồng3 gold badges50 silver badges56 bronze badges Có một giới hạn cho việc một tài liệu có thể lớn như thế nào. Đó là (như V1.8) 16 MB. Vì vậy, bạn có thể chỉ cần hết phòng nếu bạn cập nhật và nhúng. Ngoài ra, Mongo phân bổ không gian tài liệu dựa trên kích thước tài liệu trung bình trong một bộ sưu tập. Nếu bạn tiếp tục điều chỉnh/thay đổi kích thước này có thể có ý nghĩa hiệu suất tiêu cực. Tôi nghĩ rằng sẽ an toàn hơn nhiều khi tạo tài liệu mới cho mỗi bản ghi và nếu/khi bạn muốn đối chiếu dữ liệu đó, bạn sẽ thực hiện nó trong bản đồ/giảm công việc. Đã trả lời ngày 25 tháng 1 năm 2012 lúc 17:00Jan 25, 2012 at 17:00
Mark Bolusmjakmark BolusmjakMark Bolusmjak 23.1K10 Huy hiệu vàng72 Huy hiệu bạc123 Huy hiệu đồng10 gold badges72 silver badges123 bronze badges 2
MongoDB cho phép bạn lưu trữ và xử lý dữ liệu chuỗi thời gian ở quy mô. Tìm hiểu cách lưu trữ và phân tích dữ liệu chuỗi thời gian của bạn bằng cụm MongoDB. Dữ liệu chuỗi thời gian được tạo ra ở khắp mọi nơi từ phương tiện truyền thông xã hội đến đánh dấu vào các thiết bị IoT. Phân tích dữ liệu chuỗi thời gian cho phép các tổ chức phát hiện, ngăn chặn và dự đoán các sự kiện trước đối thủ của họ. Nhưng khối lượng dữ liệu chuỗi thời gian ngày càng tăng nên được lưu trữ ở đâu? Và làm thế nào nó có thể được phân tích? MongoDB đã thêm hỗ trợ gốc cho dữ liệu chuỗi thời gian trong phiên bản 5.0. Trong bài viết này, bạn sẽ tìm hiểu dữ liệu chuỗi thời gian nào, cách bạn có thể lưu trữ và truy vấn dữ liệu chuỗi thời gian trong MongoDB và thực tiễn tốt nhất là gì để làm việc với dữ liệu chuỗi thời gian trong MongoDB. Dữ liệu chuỗi thời gian là gì?Dữ liệu chuỗi thời gian là các phép đo được thực hiện tại các khoảng thời gian từ một hoặc nhiều nguồn. Mặc dù không phải tất cả dữ liệu là chuỗi thời gian trong tự nhiên, tỷ lệ ngày càng tăng của nó có thể được phân loại là chuỗi thời gian. Gần như mọi công ty cần truy vấn, phân tích và báo cáo về dữ liệu chuỗi thời gian. Hãy xem xét một nhà giao dịch ngày chứng khoán liên tục xem xét các nguồn cấp dữ liệu của giá cổ phiếu theo thời gian và các thuật toán chạy để phân tích xu hướng để xác định các cơ hội. Họ đang xem xét dữ liệu trong một khoảng thời gian với phạm vi hàng giờ hoặc hàng ngày. Một ví dụ khác có thể là làm thế nào một thiết bị đo thời tiết được kết nối có thể thu được từ xa như mức độ ẩm và thay đổi nhiệt độ để dự báo thời tiết. Ngoài ra, nó có thể theo dõi ô nhiễm không khí để đưa ra cảnh báo hoặc phân tích trước khi khủng hoảng xảy ra. Thông tin thu thập có thể được xem xét trong khoảng thời gian để tính toán xu hướng theo thời gian. Dưới đây là một ví dụ tài liệu duy nhất về đo lường giao dịch chứng khoán:
Nói chung, dữ liệu chuỗi thời gian bao gồm thời gian và phép đo, cũng như các thông tin nhận dạng khác như nguồn dữ liệu. Trong ví dụ này về dữ liệu chuỗi thời gian nắm bắt thông tin giao dịch chứng khoán, chúng tôi có ngày là phân loại thời gian và biểu tượng cổ phiếu là trường nhận dạng trong khi thông tin như giá mở và đóng là các phép đo trong trường hợp này.date as the time classifier and the stock symbol as the identification field while information like open and close prices are the measurements in this case. Dữ liệu chuỗi thời gian trong MongoDBKhi bạn làm việc với dữ liệu chuỗi thời gian, bạn thường không chỉ quan tâm đến việc lưu trữ dữ liệu mà còn yêu cầu hiệu suất đọc và ghi cao và khả năng truy vấn nâng cao. MongoDB là cơ sở dữ liệu mục đích chung dựa trên tài liệu với thiết kế lược đồ linh hoạt và ngôn ngữ truy vấn phong phú. Kể từ MongoDB 5.0, MongoDB tự nhiên hỗ trợ dữ liệu chuỗi thời gian. Bạn có thể tạo một bộ sưu tập chuỗi thời gian mới với lệnh 6. Khi bạn muốn tạo một bộ sưu tập chuỗi thời gian, bạn phải bao gồm tùy chọn 7. 7 chỉ ra tên của trường bao gồm ngày trong mỗi tài liệu. Bạn cũng nên bao gồm các tùy chọn sau:
Cuối cùng, bạn có thể muốn bao gồm tùy chọn này nếu bạn muốn xóa dữ liệu sau một thời gian nhất định đã trôi qua:
Ví dụ sau đây tạo ra một bộ sưu tập chuỗi thời gian có tên 6 trong đó 7 là ngày và 9 là ký hiệu:date and the 9 is symbol:
Mỗi tài liệu mà bạn thêm vào bộ sưu tập chuỗi thời gian sẽ cần chỉ định ít nhất là 7. Trong tài liệu ví dụ dưới đây, 7 là 1. Lưu ý rằng, 7 có thể được đặt tên bất cứ thứ gì miễn là nó thuộc loại BSON, ngày. Một tài liệu có thể được thêm vào một bộ sưu tập chuỗi thời gian bằng cách sử dụng bất kỳ phương pháp nào có thể được sử dụng để chèn tài liệu vào các bộ sưu tập MongoDB khác. Ví dụ dưới đây thêm một tài liệu vào bộ sưu tập 6 bằng 4.
Mỗi phép đo được chèn phải là một phép đo duy nhất, như các tài liệu riêng lẻ hoặc lô tài liệu với một phép đo cho mỗi tài liệu. MongoDB sẽ tối ưu hóa dữ liệu này được lưu trữ theo thời gian để giảm dấu chân kích thước và tối ưu hóa các mẫu truy cập chuỗi thời gian và thông lượng ghi. Làm cách nào để lấy dữ liệu chuỗi thời gian trong MongoDB?Các tài liệu trong các bộ sưu tập chuỗi thời gian có thể được truy vấn theo cùng một cách tài liệu trong các bộ sưu tập MongoDB khác có thể. Ví dụ: chúng ta có thể truy vấn trong vỏ MongoDB, Mongosh, cho một tài liệu trong bộ sưu tập 6 bằng cách sử dụng 6.
Vỏ MongoDB sẽ trả về một tài liệu:
MongoDB tối ưu hóa dữ liệu, vì nó lưu trữ dữ liệu được đặt hàng theo thời gian trái ngược với trật tự tự nhiên trong các bộ sưu tập thông thường. Bạn có thể cải thiện hiệu suất truy vấn bằng cách thêm các chỉ mục thứ cấp trên metafield và/hoặc timefield.
Nếu bạn muốn kích hoạt tìm kiếm trên nhiều trường siêu dữ liệu (ví dụ: ký hiệu và công ty), chúng tôi khuyên bạn nên cập nhật mô hình dữ liệu của bạn. Thay vì metafield là một giá trị duy nhất (ví dụ: ký hiệu), hãy cập nhật metafield thành một đối tượng chứa nhiều mảnh siêu dữ liệu. Ví dụ: hãy bỏ bộ sưu tập 6 hiện tại của chúng tôi và tạo một bộ sưu tập mới có 9 có tên là "Meta".
Tiếp theo, hãy chèn một tài liệu lưu trữ nhiều mảng siêu dữ liệu trong trường 9.
Bây giờ, chúng ta có thể tạo một chỉ mục thứ cấp có nhiều trường. Trong trường hợp của chúng tôi, chúng tôi sẽ tạo một chỉ mục thứ cấp cho phép tìm kiếm hiệu quả cả 0 và 1.
Dọn dẹp tài liệuThông thường dữ liệu chuỗi thời gian có thể không liên quan sau một khoảng thời gian nhất định. Thanh lọc hoặc lưu trữ dữ liệu cũ giúp việc thu thập càng nhỏ càng tốt, do đó cải thiện hiệu suất và giảm chi phí. Tự động xóa tài liệu chuỗi thời gianCách được đề xuất để tự động xóa dữ liệu đã hết hạn là đặt TTL, thời gian để biểu thức trực tiếp, trên một bộ sưu tập chuỗi thời gian dưới dạng tham số hết hạn. Dữ liệu sẽ bị xóa sau khi giá trị ngày tài liệu đạt đến ngay bây giờ - hết hạn.
Trong ví dụ trên, một tài liệu sẽ bị xóa sau khi giá trị được lưu trữ trong trường ngày là ba năm. Bạn có thể đặt hoặc sửa đổi tham số này tại bất kỳ điểm nào trong hoặc sau khi tạo thu thập, vì vậy nếu các yêu cầu của bạn thay đổi xung quanh vòng đời dữ liệu của bạn, bạn có thể dễ dàng sửa đổi hoặc cập nhật thời gian để sống cho dữ liệu của mình. Tự động lưu trữ tài liệu chuỗi thời gianMột tùy chọn khác để xử lý dữ liệu cũ là xếp nó vào lưu trữ lưu trữ trực tuyến và vận hành. Bạn có thể sử dụng lưu trữ Atlas Online để tự động lưu trữ dữ liệu từ cụm Atlas của bạn đến hồ dữ liệu do MongoDB quản lý. Lưu trữ trực tuyến có nhiều lợi thế:
Xem tài liệu MongoDB chính thức về cấu hình Lưu trữ trực tuyến để biết thêm thông tin. Phân tích dữ liệu chuỗi thời gian trong MongoDBMongoDB cung cấp một loạt các nhà khai thác đường ống tổng hợp và các giai đoạn đường ống tổng hợp để cho phép các nhà phát triển phân tích dữ liệu. Các nhà khai thác và giai đoạn này có sẵn cho tất cả các bộ sưu tập - chuỗi thời gian hoặc thường xuyên. Hãy xem xét một số nhà khai thác mới và một giai đoạn được thêm vào phiên bản 5.0 để giúp việc làm với ngày và thời gian dễ dàng hơn. Các nhà khai thác đường ống tổng hợp mới: $ dateadd, $ datediff và $ datetruncTrong phiên bản 5.0, MongoDB đã thêm các nhà khai thác đường ống tổng hợp này:
Các nhà khai thác mới làm việc với dữ liệu chuỗi thời gian thậm chí dễ dàng hơn. Ghé thăm tài liệu chính thức của MongoDB về các nhà khai thác đường ống tổng hợp để tìm hiểu thêm về tất cả các nhà khai thác có sẵn. $ datetrunc ví dụXem xét ví dụ về dữ liệu chứng khoán gốc:
Đối với ví dụ này, bộ sưu tập 6 đang sử dụng ngày Date Date như một biểu tượng và biểu tượng thời gian và là một metafield.Giả sử chúng tôi muốn tính giá cổ phiếu đóng cửa trung bình mỗi tháng cho mỗi cổ phiếu trong bộ sưu tập. Chúng ta có thể sử dụng 3 để cắt ngắn ngày thành tháng thích hợp. Sau đó, chúng ta có thể sử dụng 4 để đầu tiên, nhóm các tài liệu theo tháng và biểu tượng và thứ hai, tính toán trung bình cho mỗi nhóm. 1Kết quả của việc chạy tập hợp trên là một tập hợp các tài liệu. Mỗi tài liệu chứa giá đóng cửa trung bình mỗi tháng cho một cổ phiếu cụ thể. Dưới đây là các tài liệu ví dụ xuất phát từ việc chạy tập hợp trên. 2Chức năng cửa sổ với giai đoạn đường ống tổng hợp mới: $ setwindowfieldsCác chức năng cửa sổ cho phép các nhà phát triển chạy tính toán trên các tài liệu trong một cửa sổ nhất định. MongoDB đã thêm hỗ trợ cho các chức năng cửa sổ trong phiên bản 5.0 với việc giới thiệu giai đoạn đường ống tổng hợp $ setWindowFields. Tương tự như $ Group, $ setWindowFields cho phép bạn áp dụng một hoặc nhiều thao tác trên cửa sổ được xác định. Trong $ Group, các tài liệu được nhóm lại với nhau và sau đó tính toán được thực hiện trên mỗi nhóm. Trong $ setWindowFields, các cửa sổ liên quan đến từng tài liệu, do đó các tính toán được thực hiện trên mỗi tài liệu. Với nhà điều hành $ setWindowFields mới, bạn có thể tính trung bình cuộn của giá đóng cửa trong 30 ngày qua cho mỗi cổ phiếu: 3Kết quả của việc chạy tập hợp trên là một tập hợp các tài liệu. Bộ sẽ chứa cùng số lượng tài liệu như bộ sưu tập ban đầu. Mỗi tài liệu trong kết quả sẽ chứa một trường mới: 5. Giá trị của 5 là trung bình của giá đóng cửa của tháng trước cho biểu tượng cổ phiếu được chỉ định. Dưới đây là một tài liệu ví dụ dẫn đến việc chạy tập hợp trên. 4Biểu đồ MongoDB là một công cụ tuyệt vời để trực quan hóa dữ liệu được tính toán bởi đường ống tổng hợp trên. Điều chỉnh nguồn dữ liệu biểu đồ để sử dụng cùng một đường ống mà chúng tôi đã làm ở trên: 5Do đó, nguồn dữ liệu hiển thị tất cả các trường như biểu tượng, ngày, đóng và Averagemonthclosesprice, có thể được sử dụng trực tiếp trong biểu đồ dòng: Khi biểu đồ dữ liệu này, chúng ta có thể thấy giá trị ngay lập tức của phân tích này: Các biểu đồ trên cho thấy giá đóng cửa và biểu đồ trung bình 30 ngày của mỗi cổ phiếu. Thực tiễn tốt nhất để lưu trữ dữ liệu chuỗi thời gian trong MongoDBDưới đây là danh sách sáu thực tiễn tốt nhất để làm việc với dữ liệu chuỗi thời gian trong MongoDB:
Bản tóm tắtDữ liệu chuỗi thời gian ở khắp mọi nơi, nhưng lưu trữ và truy vấn nó có thể là thách thức.MongoDB đã thêm hỗ trợ gốc cho dữ liệu chuỗi thời gian trong phiên bản 5.0, giúp nó thậm chí còn dễ dàng hơn, nhanh hơn và rẻ hơn để làm việc với dữ liệu chuỗi thời gian. Hãy thử miễn phí cho chính mình.Bắt đầu làm việc với dữ liệu chuỗi thời gian trong MongoDB Atlas.Câu hỏi thường gặpDữ liệu chuỗi thời gian là gì?MongoDB có phải là cơ sở dữ liệu chuỗi thời gian không?Làm cách nào để lưu trữ và cập nhật dữ liệu chuỗi thời gian trong MongoDB?Các bộ sưu tập thời gian chỉ có sẵn trong Atlas?Làm thế nào để bạn sử dụng dữ liệu chuỗi thời gian? |