Hướng dẫn mongodb objectid vs string - mongodb objectid vs string

Lý do lớn nhất là các ObjectID là 12 byte, trong khi một chuỗi tương đương là 24 byte. Trên một bộ sưu tập đủ lớn, 12 byte được lưu cho mỗi id thực sự cộng lại! Những ID đó cũng có nghĩa là ít byte hơn được chuyển qua dây khi đọc hoặc viết tài liệu.

Ngoài ra, một số ODM mong đợi các đối tượng cho các tài liệu tham khảo tài liệu bên ngoài và có thể bị nhầm lẫn bởi các phiên bản chuỗi của ID. Mặc dù vậy, tôi không đủ quen thuộc với ODM PHP để nói nếu điều này có thể ảnh hưởng đến bạn một cách cụ thể.

Tuy nhiên, liên quan đến các công cụ API, có lẽ bạn nên thực hiện bình thường hóa dữ liệu trước khi gửi nó cho khách hàng, bởi vì Mongo không thực thi lược đồ, bạn có thể có bất kỳ loại dữ liệu nào trong một trường nhất định, vì vậy bạn có thể Có một số tài liệu có ID chuỗi và các tài liệu khác có ID BSON và API của bạn sẽ vui vẻ gửi cả hai cho khách hàng, nhưng cái này hoặc cái kia có thể gây ra vỡ. Trong trường hợp cụ thể này, bạn nên sử dụng BSON ObjectID trong tài liệu của mình và sau đó nên chuyển chúng vào các chuỗi trong đầu ra API của bạn.

Serkan Durusoy

unread,

Ngày 26 tháng 1 năm 2014, 3:35:47 AM1/26/141/26/14

đến

Serkan Durusoy

Ngày 26 tháng 1 năm 2014, 3:35:47 AM1/26/14

Chào bạn,Random.id() or an ObjectID which we can again generate manually using new Meteor.Collection.ObjectId()

Tôi đang cố gắng quấn đầu xung quanh thế hệ và sử dụng ID trong Meteor/Mongo/Minimongo.

Chúng tôi có hai lựa chọn; Một chuỗi mà chúng ta cũng có thể tạo thủ công bằng cách sử dụng Random.id () hoặc một ObjectID mà chúng ta có thể tạo lại theo cách thủ công bằng cách sử dụng Meteor.Collection.ObjectID () mới bằng cách sử dụng mới

  1. Có vẻ như, mặc định của MongoDB là ObjectID (đây cũng là trường hợp nếu chúng ta sử dụng bảng điều khiển Dòng Line Dòng Dieteo) nhưng Meteor đã chọn chuỗi, nhưng cho phép sử dụng một trong hai.
  2. Điều này làm tôi bối rối và gây ra những câu hỏi sau:
  3. Tại sao Meteor thấy sự cần thiết phải sử dụng chuỗi thay vì ObjectID? Việc chọn chuỗi trên Objectid cung cấp cho tôi điều gì?
  4. Tôi đạt được/mất gì nếu tôi quyết định sử dụng Objectid's?

Nếu tôi thực hiện các sửa đổi (đặc biệt là chèn) trực tiếp vào cơ sở dữ liệu của mình (hoặc từ một ứng dụng phi hành vi chia sẻ DB, điều này rất có thể đối với bất kỳ ứng dụng nào) ?

Làm thế nào để điều này (hoặc hoàn toàn) liên quan đến các vấn đề nhấp nháy khi có bù độ trễ, trong đó một cách tiếp cận được đề xuất là tạo ID trên máy khách và chuyển nó trong hàm tạo chèn.

Cảm ơn

unread,

Tin nhắn đã bị xóa1/26/14

đến

Serkan Durusoy

Ngày 26 tháng 1 năm 2014, 3:35:47 AM1/26/14
- it's the default Mongo _id type; ubiquitous

Chào bạn,

Tôi đang cố gắng quấn đầu xung quanh thế hệ và sử dụng ID trong Meteor/Mongo/Minimongo.

Chúng tôi có hai lựa chọn; Một chuỗi mà chúng ta cũng có thể tạo thủ công bằng cách sử dụng Random.id () hoặc một ObjectID mà chúng ta có thể tạo lại theo cách thủ công bằng cách sử dụng Meteor.Collection.ObjectID () mới bằng cách sử dụng mới

Có vẻ như, mặc định của MongoDB là ObjectID (đây cũng là trường hợp nếu chúng ta sử dụng bảng điều khiển Dòng Line Dòng Dieteo) nhưng Meteor đã chọn chuỗi, nhưng cho phép sử dụng một trong hai.new ObjectId()

Điều này làm tôi bối rối và gây ra những câu hỏi sau:

Tại sao Meteor thấy sự cần thiết phải sử dụng chuỗi thay vì ObjectID? Việc chọn chuỗi trên Objectid cung cấp cho tôi điều gì?

Tôi đạt được/mất gì nếu tôi quyết định sử dụng Objectid's?
- developers can create domain specific _id topologies

Nếu tôi thực hiện các sửa đổi (đặc biệt là chèn) trực tiếp vào cơ sở dữ liệu của mình (hoặc từ một ứng dụng phi hành vi chia sẻ DB, điều này rất có thể đối với bất kỳ ứng dụng nào) ?

Làm thế nào để điều này (hoặc hoàn toàn) liên quan đến các vấn đề nhấp nháy khi có bù độ trễ, trong đó một cách tiếp cận được đề xuất là tạo ID trên máy khách và chuyển nó trong hàm tạo chèn.

Cảm ơn

Tin nhắn đã bị xóa

Abigail Watson

Ngày 26 tháng 1 năm 2014, 3:48:30 PM1/26/14

Prospidid Pros & nbsp;

- Nó có dấu thời gian nhúng trong đó. & NBSP;- Đó là loại Mongo _ID mặc định; phổ cập
- Is it time-series data?

- Khả năng tương tác với các ứng dụng và trình điều khiển khác
- What is the topology of the data in the collection?

Serkan Durusoy

unread,

Ngày 26 tháng 1 năm 2014, 3:35:47 AM1/26/141/27/14

đến

Chào bạn,

Tôi đang cố gắng quấn đầu xung quanh thế hệ và sử dụng ID trong Meteor/Mongo/Minimongo.

Chúng tôi có hai lựa chọn; Một chuỗi mà chúng ta cũng có thể tạo thủ công bằng cách sử dụng Random.id () hoặc một ObjectID mà chúng ta có thể tạo lại theo cách thủ công bằng cách sử dụng Meteor.Collection.ObjectID () mới bằng cách sử dụng mới values created by Meteor will not have meaningful answers to theirgetTimestamp method, since Meteor currently constructs them fully randomly."

Có vẻ như, mặc định của MongoDB là ObjectID (đây cũng là trường hợp nếu chúng ta sử dụng bảng điều khiển Dòng Line Dòng Dieteo) nhưng Meteor đã chọn chuỗi, nhưng cho phép sử dụng một trong hai.myNewID = new Meteor.Collection.ObjectID(); but if we do normal inserts then it contains the timestamp information?

Điều này làm tôi bối rối và gây ra những câu hỏi sau:

Nếu mối tương quan của tôi là chính xác, thì chỉ có một nhược điểm của ObjectID là họ cần xử lý đúng và sự chú ý của nhà phát triển trong suốt mã. Mặt khác, Timestamp Advantage dường như thiếu, một lần nữa có thể khiến câu hỏi ban đầu của tôi hợp lệ, làm thế nào và tại sao chúng ta chọn cái này so với cái kia?

Có vẻ như nó sôi sục với các ứng dụng khác truy cập/sửa đổi dữ liệu nơi ObjectID trông giống như chúng là phương thức phổ biến hơn.

Bạn cũng có thể xây dựng nhiều hơn về các bình luận findandmodify () và getNextSkence () của bạn?

Abigail Watson

unread,

Ngày 27 tháng 1 năm 2014, 2:32:06 AM1/27/141/27/14

đến

Xin chào Serkan, & nbsp; :) Một phần chèn phía máy chủ bình thường sẽ tạo dấu thời gian một cách chính xác. & nbsp; Đây là những gì tôi đã theo xu hướng khi tôi muốn một bộ sưu tập có dấu thời gian.
A normal server-side insert should generate timestamps correctly.  This is what I've been trending towards when I want a collection that has timestamps.

// Tệp Model.js

Bài viết = New Meteor.Collection ("Bài viết", {idgenation: 'Mongo'});

// Khách hàng & NBSP;

Meteor.call ('InsertPost), newPostObjectInfo, function (error, result) {

Console.log (kết quả);

});

// người phục vụ

Meteor.call ('InsertPost', Function (newPostObjectInfo) {& nbsp;

Posts.insert ({name: newPostObjectInfo.name, chủ sở hữu: newpostobjectinfo.owner});

trả lại 'thành công';

} ')

Đối với việc tạo ID phía khách hàng, hãy cẩn thận với hầu hết và thực tế không tồn tại. & nbsp; _ids phải là duy nhất và sẽ bị từ chối nếu chúng không. & nbsp; nếu bạn có thể xử lý một số bài đăng hoặc chèn bị từ chối và sẵn sàng nắm lấy cơ hội đó ... sau đó, chắc chắn. & nbsp; Theo kinh nghiệm của tôi, đó là một loại quyết định thiết kế có thể dẫn đến một heisenbug sau đó xuống đường, nơi một trong số một triệu giao dịch thất bại. & nbsp; Nhưng nếu bạn xử lý 100.000 người dùng và họ có 100 giao dịch mỗi tháng, thì bạn sẽ bắt đầu thu thập hàng chục lỗi. & nbsp; Và vấn đề phát triển từ đó. & nbsp;almost and practically non-existent.  The _ids have to be unique, and will be rejected if they're not.  If you can handle some posts or inserts being rejected, and are willing to take that chance... then, sure.  From my experience, that's a kind of design decision that can result in a Heisenbug later down the road, where one out of a million transaction fails.  But if you're handling 100,000 users, and they have 100 transactions a month, then you're going to start collection dozens of errors.   And the problem grows from there.  

Đối với cách quyết định sử dụng nào, một lần nữa ... nó sôi sục về cấu trúc liên kết dữ liệu. & nbsp; và truy vấn. & nbsp; hãy xem cách dữ liệu của bạn được truy vấn và cách cấu trúc dữ liệu. & nbsp; tạo thành cấu trúc liên kết của nó. & nbsp; tính độc đáo, tự động, tổ chức không gian, băm chuẩn hóa, thời gian ... Các loại chỉ số là hướng dẫn của bạn về cấu trúc liên kết. & nbsp; Hãy tự hỏi bạn muốn lập chỉ mục dữ liệu của mình như thế nào và loại lập chỉ mục nào bạn muốn làm. & nbsp; Câu hỏi về chuỗi hoặc ObjectID là một ví dụ duy nhất của câu hỏi rộng hơn và lớn hơn về cách lập chỉ mục dữ liệu.

Bất kỳ dữ liệu nào bạn muốn hiển thị trong dòng thời gian hoặc theo trình tự thời gian rất có thể muốn có dấu thời gian. & nbsp; & nbsp; (Đó là một trong những cách phổ biến nhất để hiển thị dữ liệu. & nbsp; nghĩ Twitter, Facebook, QuickBooks ... bất cứ điều gì bạn có thể sắp xếp theo ngày.) Đối với thời gian lập chỉ mục, vì tính chất không gian của nó. & nbsp; và dữ liệu định vị địa lý thường không cần phải là duy nhất. & nbsp; Ngoài ra, dữ liệu tài khoản người dùng là một ví dụ về một cái gì đó cần tính độc đáo, không cần phải là dữ liệu của Timeseries, nhưng cũng không bị tổn thương nếu đó là thời gian.

Đối với FindAndModify, đó là một trong những chức năng MongoDB ít được sử dụng và đòi hỏi sự ràng buộc duy nhất. & nbsp; đọc qua tài liệu này để thảo luận về những gì xảy ra khi sử dụng _id không đơn độc:

Nolan Darilek

unread,

Ngày 27 tháng 1 năm 2014, 3:10:53 AM1/27/141/27/14

đến

Xin chào Serkan, & nbsp; :) Một phần chèn phía máy chủ bình thường sẽ tạo dấu thời gian một cách chính xác. & nbsp; Đây là những gì tôi đã theo xu hướng khi tôi muốn một bộ sưu tập có dấu thời gian.

// Tệp Model.js

Bài viết = New Meteor.Collection ("Bài viết", {idgenation: 'Mongo'});

// Khách hàng & NBSP;

Meteor.call ('InsertPost), newPostObjectInfo, function (error, result) {
To unsubscribe from this group and stop receiving emails from it, send an email to .

Console.log (kết quả);

});

unread,

// người phục vụ1/27/14

đến

Xin chào Serkan, & nbsp; :) Một phần chèn phía máy chủ bình thường sẽ tạo dấu thời gian một cách chính xác. & nbsp; Đây là những gì tôi đã theo xu hướng khi tôi muốn một bộ sưu tập có dấu thời gian.

// Tệp Model.js

Bài viết = New Meteor.Collection ("Bài viết", {idgenation: 'Mongo'});

Và vâng, tôi thấy rằng điều này mang lại một chi phí trong quá trình phát triển, nơi tôi cần chăm sóc phương pháp không chuỗi này khi thích hợp (các tuyến đường, DOM Node ID, v.v.), nhưng nếu đó là tất cả, tôi đoán bất kể cấu trúc liên kết dữ liệu của tôi là gì, Objectid dường như là sự lựa chọn an toàn hơn, bảo thủ hơn.

Cũng cảm ơn vì con trỏ FindandModify.

Steven J. Dale

unread,

Ngày 11 tháng 8 năm 2014, 5:34:11 AM8/11/148/11/14

đến

chào mọi người

@Abigail - Cảm ơn vì cái nhìn chi tiết về ID. Cuối cùng tôi cũng đang lăn lộn với thiên thạch, và đã bối rối trước các tài liệu tham khảo khác nhau giữa các bài báo và cuốn sách DM.

Điều này thực sự hữu ích, vì các cuộc trò chuyện và sự đồng thuận sau này để gắn bó với ATEOR String ID's & NBSP; ở đây

Có gì trên mặt trận này thay đổi kể từ đó không?

=: s

kwame

unread,

Ngày 24 tháng 9 năm 2014, 12:35:30 PM9/24/149/24/14

đến

chào mọi người

@Abigail - Cảm ơn vì cái nhìn chi tiết về ID. Cuối cùng tôi cũng đang lăn lộn với thiên thạch, và đã bối rối trước các tài liệu tham khảo khác nhau giữa các bài báo và cuốn sách DM.

Điều này thực sự hữu ích, vì các cuộc trò chuyện và sự đồng thuận sau này để gắn bó với ATEOR String ID's & NBSP; ở đây

unread,

Có gì trên mặt trận này thay đổi kể từ đó không?9/25/14

đến

chào mọi người

@Abigail - Cảm ơn vì cái nhìn chi tiết về ID. Cuối cùng tôi cũng đang lăn lộn với thiên thạch, và đã bối rối trước các tài liệu tham khảo khác nhau giữa các bài báo và cuốn sách DM.

kwame

unread,

Ngày 24 tháng 9 năm 2014, 12:35:30 PM9/24/149/25/14

đến

chào mọi người

@Abigail - Cảm ơn vì cái nhìn chi tiết về ID. Cuối cùng tôi cũng đang lăn lộn với thiên thạch, và đã bối rối trước các tài liệu tham khảo khác nhau giữa các bài báo và cuốn sách DM.

unread,

Điều này thực sự hữu ích, vì các cuộc trò chuyện và sự đồng thuận sau này để gắn bó với ATEOR String ID's & NBSP; ở đây9/25/14

đến

chào mọi người

@Abigail - Cảm ơn vì cái nhìn chi tiết về ID. Cuối cùng tôi cũng đang lăn lộn với thiên thạch, và đã bối rối trước các tài liệu tham khảo khác nhau giữa các bài báo và cuốn sách DM.

Steven J. Dale

unread,

Điều này thực sự hữu ích, vì các cuộc trò chuyện và sự đồng thuận sau này để gắn bó với ATEOR String ID's & NBSP; ở đây9/26/14

đến

chào mọi người

@Abigail - Cảm ơn vì cái nhìn chi tiết về ID. Cuối cùng tôi cũng đang lăn lộn với thiên thạch, và đã bối rối trước các tài liệu tham khảo khác nhau giữa các bài báo và cuốn sách DM.

Điều này thực sự hữu ích, vì các cuộc trò chuyện và sự đồng thuận sau này để gắn bó với ATEOR String ID's & NBSP; ở đây

Câu hỏi sau đó là giá nào?Sẽ có độ trễ comp và các lợi ích khác vẫn 'chỉ hoạt động' .. & nbsp; thêm hỗ trợmột ý kiến hay

Steven J. Dale

unread,

Ngày 26 tháng 9 năm 2014, 10:39:30 PM9/26/149/26/14

đến