MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Защо крайният 0x00 байт след BSON низ (а не Cstring/ename)?

Причината както за дължината на низа, така и за нулевия терминатор е двойна:съвместимост със съществуващи низове в стил C и производителност.

За производителност MongoDB трябва да може бързо да отиде до конкретно поле в документ, без да обикаля целия BSON. Това е важно, особено ако търсите поле, което е близо до края на голям (да речем 16 MB) документ. С дължината на низа, кодирана като една от първите информации за тип низ, той може просто да пропусне този брой байтове и да стигне до следващото поле. В противен случай ще трябва да премине през целия низ, докато намери края на низа.

За съвместимост MongoDB е написан на C++, където низовете са нулев термин . Той може да отреже този нулев терминатор, за да спести един байт, тъй като дължината е кодирана, но извеждането на този низ от BSON във формат, който може да се използва от C++, ще изисква повторно поставяне на този нула. Това ще изисква специализирана процедура за обработка на низове, като единственото предимство е спестяването на един байт.

Като цяло беше решено, че "губенето" на един байт е приемлив компромис.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Има начин за налагане на референтна цялост в MongoDB

  2. Дизайн на схема на MongoDB:Винаги има схема

  3. Индексът MongoDB, който не е чувствителен към главни и малки букви, започва с проблеми с производителността

  4. Mongodb - Map-Reduce - Пълните данни не се връщат

  5. Внедрете функция за автоматично довършване с помощта на търсене в MongoDB