Chuỗi thời gian MongoDB metaField

Bộ sưu tập Chuỗi thời gian là một tính năng mới đáng kinh ngạc có sẵn trong MongoDB 5. 0. Dựa trên các thử nghiệm đầu tiên tôi đã thực hiện, hỗ trợ Chuỗi thời gian cung cấp hiệu suất tương đương với việc sử dụng chỉ mục trên các bộ sưu tập thông thường nhưng tiết kiệm nhiều dung lượng đĩa và bộ nhớ. Quy trình tổng hợp, là những truy vấn phổ biến mà bạn có thể chạy trên dữ liệu chuỗi thời gian, thậm chí có thể nhận được nhiều lợi ích hơn

Hãy bắt đầu các bài kiểm tra

Cơ sở dữ liệu chuỗi thời gian là gì?

Nói chung, cơ sở dữ liệu Chuỗi thời gian là cơ sở dữ liệu chuyên biệt được thiết kế để lưu trữ hiệu quả dữ liệu được tạo từ luồng giá trị liên tục được liên kết với dấu thời gian. Trường hợp sử dụng điển hình là khi bạn cần lưu trữ dữ liệu đến từ thiết bị cảm biến truyền các điểm dữ liệu theo các khoảng thời gian cố định, nhưng giờ đây chúng được sử dụng để hỗ trợ nhiều ứng dụng hơn

Các trường hợp sử dụng điển hình là

  • dữ liệu vạn vật
  • Giám sát các dịch vụ web, ứng dụng và cơ sở hạ tầng
  • dự báo bán hàng
  • Hiểu xu hướng tài chính
  • Xử lý dữ liệu xe tự lái hoặc các thiết bị vật lý khác

Cơ sở dữ liệu chuyên biệt về Chuỗi thời gian sử dụng các thuật toán nén để giảm thiểu yêu cầu về không gian và cũng cung cấp các đường dẫn truy cập để khai thác dữ liệu hiệu quả hơn. Điều này cải thiện hiệu suất truy xuất dữ liệu dựa trên bộ lọc phạm vi thời gian và tổng hợp dữ liệu. Chúng hiệu quả hơn so với việc sử dụng cơ sở dữ liệu quan hệ chung

Thông thường, các giá trị của Chuỗi thời gian sẽ không thay đổi sau khi được ghi lại, chúng chỉ được xác định là CHÈN, còn được gọi là điểm dữ liệu bất biến. Sau khi dữ liệu được lưu trữ, thao tác cập nhật thực sự không phổ biến

Một đặc điểm khác của Chuỗi thời gian là mọi mặt hàng phải có một giá trị duy nhất (một nhiệt độ, giá cổ phiếu, v.v.)

Cơ sở dữ liệu chuỗi thời gian phổ biến là InfluxDB, Prometheus, Graphite. Ngoài ra còn có nhiều người khác. VictoriaMetrics nói riêng là một nhánh phổ biến của Prometheus và được sử dụng trong phần mềm Quản lý và Giám sát Percona của chúng tôi

Bộ sưu tập chuỗi thời gian mới trong MongoDB 5. 0

MongoDB, cũng như cơ sở dữ liệu quan hệ, đã được sử dụng rộng rãi trong nhiều năm để lưu trữ dữ liệu nhiệt độ từ các cảm biến, giá cổ phiếu và bất kỳ loại dữ liệu không thay đổi nào khác theo thời gian. MongoDB phiên bản 5. 0 hứa hẹn rằng điều này có thể được thực hiện hiệu quả hơn, vì vậy hãy xem cách thức hoạt động của nó

Bộ sưu tập Chuỗi thời gian xuất hiện dưới dạng bộ sưu tập thông thường và các thao tác bạn có thể thực hiện hoàn toàn giống nhau. chèn, cập nhật, tìm, xóa, tổng hợp. Sự khác biệt chính là đằng sau bức màn. MongoDB lưu trữ dữ liệu thành định dạng lưu trữ được tối ưu hóa khi chèn. So với tập hợp thông thường, Chuỗi thời gian nhỏ hơn và mang lại hiệu quả truy vấn cao hơn

MongoDB coi các bộ sưu tập Chuỗi thời gian là các chế độ xem phi vật chất có thể ghi. Dữ liệu được lưu trữ hiệu quả hơn, tiết kiệm dung lượng ổ đĩa và chỉ mục nội bộ được tạo tự động sắp xếp dữ liệu theo thời gian. Theo mặc định, dữ liệu được nén bằng thuật toán zstd thay vì snappy. Kiểu nén mới cung cấp tỷ lệ cao hơn, ít yêu cầu CPU hơn và nó rất phù hợp với dữ liệu chuỗi thời gian khi có ít biến thể từ tài liệu này sang tài liệu tiếp theo. Cuối cùng, bạn có thể thay đổi thuật toán nén, nhưng điều đó không thực sự được khuyến khích

Bộ sưu tập Chuỗi thời gian không được tạo hoàn toàn khi bạn chèn tài liệu, giống như bộ sưu tập thông thường. Bạn phải tạo nó một cách rõ ràng

Hãy làm một số bài kiểm tra

Tạo bộ sưu tập chuỗi thời gian để lưu trữ giá cổ phiếu

Chúng ta cần sử dụng phương thức createCollection(), cung cấp một số tham số

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

[trực tiếp. mongos] chuỗi thời gian> db . createCollection.createCollection(

"stockprice1week", {

  chuỗi thời gian. {

    trường thời gian. "dấu thời gian",

    metaField. "siêu dữ liệu",

    độ chi tiết. "phút"

  },

  hết hạn sau giây. 604800  

  }

)

{ ok. 1 }

Tên của bộ sưu tập là stockprice1week và tham số bắt buộc duy nhất là timeField. Các thông số khác là tùy chọn

trường thời gian. tên của trường nơi ngày được lưu trữ. Điều này sẽ được tự động lập chỉ mục và được sử dụng để truy xuất dữ liệu

siêu trường. trường chứa siêu dữ liệu. Nó có thể là một giá trị vô hướng đơn giản hoặc một đối tượng JSON phức tạp hơn. Đó là tùy chọn. Nó không thể là _id hoặc giống như timeField. Ví dụ: siêu dữ liệu cho cảm biến nhiệt độ có thể là mã của cảm biến, loại, vị trí, v.v.

độ chi tiết. các giá trị có thể là giây, phút và giờ. Nếu không được đặt, nó sẽ mặc định là giây. Nếu bạn chỉ định kết quả khớp gần nhất giữa hai giá trị liên tiếp, điều này sẽ giúp MongoDB lưu trữ dữ liệu hiệu quả hơn và cải thiện hiệu suất truy vấn

hết hạnSau giây. bạn có thể tự động xóa tài liệu sau thời gian đã chỉ định, giống như chỉ mục TTL. Nếu không được chỉ định các tài liệu sẽ không hết hạn

Hãy chèn một số dữ liệu ngẫu nhiên cho ba cổ phiếu. Táo, cam và chuối. Dữ liệu được thu thập một lần mỗi phút

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[trực tiếp. mongos] dòng thời gian> var . 00. 00. 000Z" stockPriceDate = ISODate("2021-10-13T00:00:00.000Z")

 

[trực tiếp. mongos] dòng thời gian> var priceApple = 100

 

[trực tiếp. mongos] dòng thời gian> var priceOrange = 50

 

[trực tiếp. mongos] dòng thời gian> var priceBanana = 80

 

[trực tiếp. mongos] chuỗi thời gian> cho (i = 1; i < 100000; i++) {

  priceApple = priceApple + Math.random();

  priceOrange = priceOrange + Math.random();

  priceChuối = priceChuối + Math.random();

  db. stockprice1tuần. chèn({ "dấu thời gian". ngày giá chứng khoán, "siêu dữ liệu". { "stockName". "Apple", "tiền tệ". "Đô la" }, "giá cổ phiếu": priceApple });

  db. stockprice1tuần. chèn({ "dấu thời gian". ngày giá chứng khoán, "siêu dữ liệu". { "stockName". "Cam", "tiền tệ". "Đô la" }, "giá cổ phiếu": priceOrange });

  db. stockprice1tuần. chèn({ "dấu thời gian". ngày giá chứng khoán, "siêu dữ liệu". { "stockName". "Chuối", "tiền". "Euro" }, "giá cổ phiếu": priceChuối });

  ngày giá chứng khoán = mới Ngày(stockPriceDate.getTime() + 1000 * 60);

}

Chúng tôi có thể truy vấn để kiểm tra các tài liệu đã chèn

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1tuần.stockPrice1week. tìm(). giới hạn(3)

[

  {

    _id. ObjectId("6166df318f32e5d3ed304fc5"),

    dấu thời gian. Ngày ISO("2021-10-13T00:00:00.000Z"),

    siêu dữ liệu. { Tên kho. 'Apple', tiền tệ. 'Đô la' },

    giá cổ phiếu. 100. 6547271930824

  },

  {

    _id. ObjectId("6166df318f32e5d3ed304fc6"),

    dấu thời gian. Ngày ISO("2021-10-13T00:00:00.000Z"),

    siêu dữ liệu. { Tên kho. 'Cam', tiền tệ. 'Đô la' },

    giá cổ phiếu. 50. 51709117468818

  },  

  {

    _id. ObjectId("6166df318f32e5d3ed304fc7"),

    dấu thời gian. Ngày ISO("2021-10-13T00:00:00.000Z"),

    siêu dữ liệu. { Tên kho. 'Chuối', tiền tệ. 'Euro' },

    giá cổ phiếu. 80. 17611551979255

  }

]

Kiểm tra kích thước bộ sưu tập

Bây giờ, hãy tạo một bộ sưu tập thông thường có cùng dữ liệu chính xác

Vỏ bọc

1

2

3

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1tuần.stockPrice1week. tìm(). forEach(hàm (doc) {

  db. stockprice1week_regular. insertOne(doc);

})

1

 

Hãy kiểm tra tổng kích thước của hai bộ sưu tập

Vỏ bọc

1

2

3

4

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1tuần.stockPrice1week. thống kê(). tổng kích thước

5357568

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1week_regular.stockPrice1week_regular. thống kê(). tổng kích thước

21934080

Đúng như dự đoán, bộ sưu tập Chuỗi thời gian nhỏ hơn bốn lần so với bộ sưu tập thông thường. Ngoài ra, hãy xem xét bộ sưu tập thông thường không có bất kỳ chỉ mục phụ nào vào lúc này

Truy vấn Bộ sưu tập

Hãy chạy một truy vấn đơn giản để tìm ra các giá trị cổ phiếu cho một dấu thời gian cụ thể. Chúng tôi kiểm tra truy vấn trên cả hai bộ sưu tập

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1tuần.stockPrice1week. tìm( { "dấu thời gian". Ngày ISO("2021-10-23T12. 00. 00. 000Z") } )

[

  {

    _id. ObjectId("6166dfc68f32e5d3ed3100f5"),

    dấu thời gian. Ngày ISO("2021-10-23T12:00:00.000Z"),

    siêu dữ liệu. { Tên kho. 'Apple', tiền tệ. 'Đô la' },

    giá cổ phiếu. 7636. 864548363888

  },

  {

    _id. ObjectId("6166dfc68f32e5d3ed3100f6"),

    dấu thời gian. Ngày ISO("2021-10-23T12:00:00.000Z"),

    siêu dữ liệu. { Tên kho. 'Cam', tiền tệ. 'Đô la' },

    giá cổ phiếu. 7607. 03756525094

  },

  {

    _id. ObjectId("6166dfc68f32e5d3ed3100f7"),

    dấu thời gian. Ngày ISO("2021-10-23T12:00:00.000Z"),

    siêu dữ liệu. { Tên kho. 'Chuối', tiền tệ. 'Euro' },

    giá cổ phiếu. 7614. 360031277444  

  }

]

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1week_regular.stockPrice1week_regular. tìm( { "dấu thời gian". Ngày ISO("2021-10-23T12. 00. 00. 000Z") } )

[

  {

    _id. ObjectId("6166dfc68f32e5d3ed3100f5"),

    dấu thời gian. Ngày ISO("2021-10-23T12:00:00.000Z"),

    siêu dữ liệu. { Tên kho. 'Apple', tiền tệ. 'Đô la' },

    giá cổ phiếu. 7636. 864548363888

  },

  {

    _id. ObjectId("6166dfc68f32e5d3ed3100f6"),

    dấu thời gian. Ngày ISO("2021-10-23T12:00:00.000Z"),

    siêu dữ liệu. { Tên kho. 'Cam', tiền tệ. 'Đô la' },

    giá cổ phiếu. 7607. 03756525094

  },

  {

    _id. ObjectId("6166dfc68f32e5d3ed3100f7"),

    dấu thời gian. Ngày ISO("2021-10-23T12:00:00.000Z"),

    siêu dữ liệu. { Tên kho. 'Chuối', tiền tệ. 'Euro' },

    giá cổ phiếu. 7614. 360031277444

  }

]

Chúng tôi đã có kết quả tương tự, nhưng điều quan trọng ở đây là xem giải thích () để xem kế hoạch thực hiện. Đây là giải thích () của bộ sưu tập thông thường

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1week_regular.stockPrice1week_regular. tìm( { "dấu thời gian". Ngày ISO("2021-10-23T12. 00. 00. 000Z") } ). giải thích("executionStats")

{

.. .

Kế hoạch chiến thắng. {

  giai đoạn. 'COLLSCAN',

  bộ lọc. {

    dấu thời gian. { '$eq'. Ngày ISO("2021-10-23T12. 00. 00. 000Z") }

  },

  hướng. 'chuyển tiếp'

.. .

.. .

thực thiThành công. true,

nĐã trả lại. 3,

executionTimeMillis. 200,

totalKeysExamined. 0,

totalDocsExamined. 299997,

.. .

.. .

Chúng tôi đã không tạo bất kỳ chỉ mục phụ nào, vì vậy kế hoạch chiến thắng là COLLSCAN, tất cả các tài liệu phải được kiểm tra. Truy vấn mất 200 mili giây

Thay vào đó, đây là giải thích () của bộ sưu tập Chuỗi thời gian

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1tuần.stockPrice1week. tìm( { "dấu thời gian". Ngày ISO("2021-10-23T12. 00. 00. 000Z") } ). giải thích("executionStats")

{

.. .

.. .

Chỉ số thực thi. {

  thực hiện thành công. đúng,

  nĐã trả lại. 3,

  thời gian thực hiệnMillis. 2,

  totalKeysExamined. 0,

  tổng số Tài liệu đã kiểm tra. 8,

  Các giai đoạn thực hiện. {

  giai đoạn. 'COLLSCAN',

    bộ lọc. {

      '$and'. [

        {

          _id. { '$lte'. ObjectId("6173f940ffffffffffffffff") }

        },

        {

          _id. { '$gte'. ObjectId("6172a7c00000000000000000") }

        },

      {

      'kiểm soát. tối đa. dấu thời gian'. {

        '$_internalExprGte'. Ngày ISO("2021-10-23T12:00:00.000Z")

      }

    },

    {

      'kiểm soát. tối thiểu. dấu thời gian'. {

        '$_internalExprLte'. Ngày ISO("2021-10-23T12:00:00.000Z")

      }

    }

  ]

},

.. .

.. .

Đáng ngạc nhiên đó là COLLSCAN, nhưng với các số khác nhau. Số lượng tài liệu được kiểm tra hiện chỉ còn tám và thời gian thực hiện là hai phần nghìn giây

Như đã đề cập, Chuỗi thời gian là một chế độ xem phi vật chất hóa. Nó hoạt động như một lớp trừu tượng. Dữ liệu thực tế được lưu trữ vào một bộ sưu tập hệ thống khác (hệ thống. xô. stockPrice1week) nơi tài liệu được lưu ở định dạng hơi khác. Mục tiêu của bài viết này không phải là đào sâu vào bên trong, chỉ cần lưu ý rằng định dạng lưu trữ khác nhau cho phép mongod chỉ tìm nạp một vài nhóm dữ liệu thay vì đọc mọi thứ, ngay cả khi nó được gắn cờ là COLLSCAN. Thật ngạc nhiên

Điều gì xảy ra nếu tôi tạo một chỉ mục trên Bộ sưu tập thông thường?

Hãy thử

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1week_regular.stockPrice1week_regular. createIndex( { "timestamp". 1 } )

dấu thời gian_1

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1week_regular.stockPrice1week_regular. getIndexes()

[

  { v. 2, phím. { _id. 1 }, tên. '_id_' },

  { v. 2, phím. { dấu thời gian. 1 }, tên. 'timestamp_1' }

]

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1week_regular.stockPrice1week_regular. tìm({"dấu thời gian". Ngày ISO("2021-10-23T12. 00. 00. 000Z")}). giải thích("executionStats")

{

.. .

.. .

Kế hoạch chiến thắng. {

  giai đoạn. 'TÌM HIỂU',

  Giai đoạn đầu vào. {

  giai đoạn. 'IXSCAN',

  keyPattern. { dấu thời gian. 1 },

  tên chỉ mục. 'dấu thời gian_1',

.. .

.. .

Chỉ số thực thi. {

  nĐã trả lại. 3,

  thời gian thực hiệnMillis. 2,

  totalKeysExamined. 3,

  tổng số Tài liệu đã kiểm tra. 3,

.. .

Bây giờ kế hoạch chiến thắng là IXSCAN, chỉ mục mới được sử dụng. Chỉ có ba khóa được kiểm tra, ba tài liệu được kiểm tra và ba tài liệu được trả về. Truy vấn mất hai mili giây

Vì vậy, nó nhanh như bộ sưu tập Chuỗi thời gian. Không có sự khác biệt lớn như vậy;

Cũng lưu ý rằng hiệu suất tương tự đi kèm với chi phí có bộ sưu tập lớn hơn ở cuối vì chúng tôi đã tạo chỉ mục phụ

Vỏ bọc

1

2

3

4

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1week_regular.stockPrice1week_regular. thống kê(). tổng kích thước

25251840

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1tuần.stockPrice1week. thống kê(). tổng kích thước

5357568

Để có được thời gian thực hiện tương đương, giờ đây, bộ sưu tập thông thường lớn hơn năm lần so với Chuỗi thời gian

Truy vấn có Bộ lọc Phạm vi Thời gian

Hãy kiểm tra một truy vấn khác để tìm kiếm một loạt dấu thời gian. Sau đây là các đầu ra giải thích ()

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1week_regular.stockPrice1week_regular. tìm( { "dấu thời gian". { $gte. Ngày ISO("2021-10-20T00. 00. 00Z"), $lt: Ngày ISO("2021-10-20T23. 59. 59Z") } } ).explain("executionStats")

{

.. .

Kế hoạch chiến thắng. {

  giai đoạn. 'TÌM HIỂU',

  Giai đoạn đầu vào. {

    giai đoạn. 'IXSCAN',

    keyPattern. { dấu thời gian. 1 },

.. .

Chỉ số thực thi. {

  nĐã trả lại. 4320,

  thời gian thực hiệnMillis. 7,

  totalKeysExamined. 4320,

  tổng số Tài liệu đã kiểm tra. 4320,

.. .

 

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1tuần.stockPrice1week. tìm( { "dấu thời gian". { $gte. Ngày ISO("2021-10-20T00. 00. 00Z"), $lt: Ngày ISO("2021-10-20T23. 59. 59Z") } } ).explain("executionStats")

{

.. .

.. .

Kế hoạch chiến thắng. {

  giai đoạn. 'COLLSCAN',

  bộ lọc. {

    '$and'. [

    {

      _id. { '$lt'. ObjectId("6170ad7f0000000000000000") }

    },

    {

      _id. { '$gte'. ObjectId("616e0a800000000000000000") }

    },

    {

      'kiểm soát. tối đa. dấu thời gian'. {

        '$_internalExprGte'. Ngày ISO("2021-10-20T00. 00. 00. 000Z")

      }

    },

    {

      'kiểm soát. tối thiểu. dấu thời gian'. {

        '$_internalExprLt'. Ngày ISO("2021-10-20T23:59:59.000Z")

      }

    }

  ]

},

.. .

.. .

Chỉ số thực thi. {

  thực hiện thành công. đúng,

  nĐã trả lại. 6,

  thời gian thực hiệnMillis. 6,

  totalKeysExamined. 0,

  tổng số Tài liệu đã kiểm tra. 11,

.. .

Giống như trước đây. Thời gian thực hiện về cơ bản là giống nhau cho cả hai truy vấn. Vấn đề chính vẫn là kích thước của bộ sưu tập thông thường lớn hơn đáng kể

Chỉ có sáu tài liệu rõ ràng được trả về bởi Chuỗi thời gian, nhưng nó không. Nếu bạn thực hiện truy vấn thực, bạn sẽ nhận được 4320 tài liệu. Sáu tài liệu được đề cập bởi giải thích () đề cập đến các tài liệu phải được trả về bởi bộ sưu tập thực bên dưới chế độ xem phi vật chất hóa

kiểm tra tổng hợp

Trên dữ liệu Chuỗi thời gian của chúng tôi, chúng tôi muốn thực hiện một số tổng hợp. Đây là một nhiệm vụ điển hình. tính trung bình trong một khoảng thời gian, tìm giá trị tối thiểu và tối đa và các loại thống kê khác

Giả sử chúng ta cần tính giá cổ phiếu trung bình hàng ngày. Chúng ta có thể sử dụng đường dẫn tổng hợp sau đây chẳng hạn

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

db. stockprice1tuần. tổng hợp([

{

  $dự án. {

    ngày. {

      $dateToParts. { ngày. "$timestamp" }

    },

    giá cổ phiếu. 1

  }

},

{

  $nhóm. {

    _id. {

      ngày. {

        năm. "$date. năm",

        tháng. "$date. tháng",

        ngày. "$date. ngày"

      }

    },

    giá trung bình. { $trung bình. "$stockprice" }

  }

}

])

[

{

_id. { ngày. { năm. 2021, tháng. 12, ngày. 4 } },

giá trung bình. 37939. 782043249594

},

{

_id. { ngày. { năm. 2021, tháng. 11, ngày. 22 } },

giá trung bình. 29289. 700949196136

},

{

_id. { ngày. { năm. 2021, tháng. 10, ngày. 27 } },

giá trung bình. 10531. 347070537977

},

.. .

.. .

Như thường lệ, chúng ta hãy xem giải thích () của tổng hợp đối với hai bộ sưu tập, chỉ tập trung vào thời gian thực hiện và tài liệu được kiểm tra

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1tuần.stockPrice1week. giải thích("executionStats"). tổng hợp([ { $ . : { ngày. { $dateToParts. { ngày. "$timestamp" } }, stockPrice: 1 } }, { . $group: { _id. { ngày. { năm. "$date. năm", tháng. "$date. tháng", ngày. "$date. ngày" } }, giá trung bình: { $trung bình. "$stockPrice" } } }])

{

.. .

Chỉ số thực thi. {

  thực hiện thành công. đúng,

  nĐã trả lại. 300,

  thời gian thực hiệnMillis. 615,

  totalKeysExamined. 0,

  tổng số Tài liệu đã kiểm tra. 300,

  Các giai đoạn thực hiện. {

  giai đoạn. 'COLLSCAN',

.. .

Vỏ bọc

1

2

3

4

5

6

7

8

9

10

11

12

[trực tiếp. mongos] chuỗi thời gian> db . stockprice1week_regular.stockPrice1week_regular. giải thích("executionStats"). tổng hợp([ { $ . : { ngày. { $dateToParts. { ngày. "$timestamp" } }, stockPrice: 1 } }, { . $group: { _id. { ngày. { năm. "$date. năm", tháng. "$date. tháng", ngày. "$date. ngày" } }, giá trung bình: { $trung bình. "$stockPrice" } } }])

{

.. .

Chỉ số thực thi. {

  thực hiện thành công. đúng,

  nĐã trả lại. 299997,

  thời gian thực hiệnMillis. 1022,

  totalKeysExamined. 0,

  tổng số Tài liệu đã kiểm tra. 299997,

  Các giai đoạn thực hiện. {

    giai đoạn. 'PROJECTION_DEFAULT',

.. .

Quy trình tổng hợp chạy nhanh hơn 40 phần trăm với bộ sưu tập Chuỗi thời gian. Điều này sẽ phù hợp hơn khi bộ sưu tập càng lớn

Phần kết luận

MongoDB 5. 0 là phiên bản mới thú vị của cơ sở dữ liệu dựa trên tài liệu phổ biến nhất và các tính năng mới như bộ sưu tập Chuỗi thời gian và chia lại phân đoạn thật tuyệt vời

Dù sao, do có nhiều thay đổi cốt lõi đối với WiredTiger và máy chủ cốt lõi được giới thiệu để hỗ trợ các tính năng mới, MongoDB 5. 0. x vẫn chưa ổn định. Chúng tôi không khuyên bạn nên sử dụng nó cho môi trường sản xuất

MongoDB có tốt cho dữ liệu chuỗi thời gian không?

MongoDB là cơ sở dữ liệu có 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 vốn hỗ trợ dữ liệu chuỗi thời gian .

Bộ sưu tập chuỗi thời gian trong MongoDB là gì?

MongoDB coi các bộ sưu tập chuỗi thời gian là các chế độ xem không cụ thể hóa có thể ghi được hỗ trợ bởi một bộ sưu tập nội bộ . Khi bạn chèn dữ liệu, bộ sưu tập nội bộ sẽ tự động sắp xếp dữ liệu chuỗi thời gian thành định dạng lưu trữ được tối ưu hóa. Khi bạn truy vấn các bộ sưu tập chuỗi thời gian, bạn thao tác trên một tài liệu cho mỗi phép đo.

Cơ sở dữ liệu nào là tốt nhất cho dữ liệu chuỗi thời gian?

8 cơ sở dữ liệu chuỗi thời gian hàng đầu .
InfluxDB
Prometheus
khí cầu
Dữ liệuStax
nhiệm vụDB
tu sĩ
Dòng thời gian của Amazon
phân tích xu hướng

Làm cách nào để lưu trữ thời gian trong MongoDB?

MongoDB lưu trữ thời gian ở dạng UTC theo mặc định và sẽ chuyển đổi bất kỳ biểu thị giờ địa phương nào sang dạng này. Các ứng dụng phải vận hành hoặc báo cáo về một số giá trị thời gian địa phương chưa sửa đổi có thể lưu trữ múi giờ cùng với dấu thời gian UTC và tính toán thời gian địa phương ban đầu trong logic ứng dụng của chúng.