Yêu cầu lưu trữ giá trị số nguyên nhỏ hơn, nhưng tất nhiên, không đáng kể lắm. Thuật toán sắp xếp / lập chỉ mục cho một số sẽ hơi nhanh hơn một chuỗi thông thường, nhưng sự khác biệt sẽ cực kỳ nhỏ vì chuỗi cũng rất ngắn.
Tôi sẽ không mong đợi sự khác biệt về hiệu suất hấp dẫn giữa cả hai. Nếu bạn định lưu trữ địa chỉ IPV6, vấn đề sẽ là BSON ( http://bsonspec.org/ # / đặc điểm kỹ thuật ) không có kiểu dữ liệu đơn giản để lưu trữ số 16 byte, vì vậy, nó không nhất thiết phải phù hợp tự nhiên để chỉ lưu trữ dưới dạng số.
Cuối cùng, tôi có thể chỉ sử dụng chuỗi nếu bạn muốn tránh thực hiện việc dịch từ bộ nhớ sang màn hình hoặc nếu bạn muốn làm cho các truy vấn tự nhiên hơn để viết cho hầu hết chúng ta :):
db.ips.find({addr: "192.168.1.1"})
Nếu sử dụng chuỗi, tôi cũng khuyên bạn nên xem xét lưu trữ dưới dạng chuỗi có định dạng cố định, chẳng hạn như 192.168.001.001
nếu bạn muốn thực hiện các tìm kiếm phức tạp hơn, chẳng hạn như tìm kiếm theo phạm vi. Vì một chuỗi được lưu trữ với một định dạng cố định nhất quán sẽ sắp xếp một cách tự nhiên, bạn có thể sử dụng nó theo nhiều cách hơn những gì bạn có thể làm. Nếu các phạm vi không quan trọng, thì không cần thiết phải lưu trữ theo cách này.
Với một định dạng cố định, bạn có thể thực hiện một truy vấn như:
db.ips.find({ addr: {
$gte: "192.168.000.000",
$lte: "192.168.000.255" } })
Điều đó sẽ tìm thấy tất cả các địa chỉ IP giữa (bao gồm) 192.168.0.0
và 192.168.0.255
.
Lý tưởng nhất là bạn sẽ có một chỉ mục trên trường theo một trong hai cách:
db.ips.ensureIndex({ addr: 1 })