2014-12-03 14 views
5

Tôi biết rằng ObjectIDs là 12 byte trong MongoDB. Và tôi biết rằng numbers là 64 bit. Nhưng làm cách nào để tìm ra kích thước của một số đã lưu stringKích thước của một loại chuỗi trong MongoDB

+0

db.test.findOne(). String_fielsd.length; – Disposer

+2

@Disposer: OP yêu cầu kích thước * của chuỗi chứ không phải là * length *. Nhiều triển khai chuỗi cũng lưu trữ độ dài của chuỗi và có thể hoặc không thể thêm một terminator null. Hơn nữa, trong khi chiều dài và kích thước của chuỗi * chính nó * là điều tương tự trong ASCII, chúng chắc chắn không có trong UTF-8, hãy xem http://en.wikipedia.org/wiki/UTF-8. Ví dụ: "ä" có 'length' 1, nhưng yêu cầu hai byte để lưu trữ (' 0xC3A4'). – mnemosyn

Trả lời

5

Đặc tả bson tại http://bsonspec.org/spec.html là điểm khởi đầu tốt. Cụ thể, điều quan trọng là nhận ra rằng BSON có các loại số nguyên, bao gồm cả số nguyên 32 bit, mặc dù JavaScript sử dụng số dấu phẩy động 64 bit - MongoDB sử dụng JavaScript rất nhiều, nhưng không phải là được viết bằng JavaScript và có các loại khác nhau. Sự tồn tại của các số nguyên thực là khá quan trọng, nếu không thì $inc trên một số lớn sẽ không hoạt động.

Để trả lời câu hỏi của bạn: chuỗi được lưu trữ dưới dạng chuỗi được mã hóa UTF-8 có dấu mũ 0 và chiều dài 32 bit ở trước, cộng với chỉ báo loại 1 byte và tên phần tử. Hãy nhớ rằng các đối tượng có thêm chi phí.

+1

_- "Hãy nhớ rằng các đối tượng có thêm chi phí." _ ... Không chắc tôi hiểu bạn ở đây. Bạn có thể xây dựng điều này =) –

+1

Như bạn có thể thấy trong thông số BSON, bản thân tài liệu bao gồm tổng chiều dài tính theo byte, một 'e_list' và một số không kết thúc. 'E_list' là danh sách các phần tử, mỗi phần tử có một phần tử có chỉ báo kiểu, tên phần tử và dữ liệu thực tế. Một tài liệu nhúng sẽ là một phần tử của riêng nó, vì vậy việc lồng sẽ làm tăng kích thước (một cách tự nhiên). Hơn nữa, các tài liệu sẽ được đệm không chỉ bởi yếu tố đệm, mà còn sao cho kích thước của nó theo byte là bội số của 16 (có thể phụ thuộc vào phiên bản và hệ điều hành). – mnemosyn

Các vấn đề liên quan