MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Dlaczego końcowy bajt 0x00 po ciągu BSON (nie Cstring/ename)?

Uzasadnienie zarówno długości łańcucha, jak i terminatora zerowego jest dwojakie:zgodność z istniejącymi łańcuchami w stylu C oraz wydajność.

Aby uzyskać wydajność, MongoDB musi być w stanie szybko przejść do określonego pola w dokumencie bez iteracji przez cały BSON. Jest to ważne zwłaszcza, jeśli szukasz pola, które znajduje się blisko końca dużego (powiedzmy 16 MB) dokumentu. Gdy długość ciągu jest zakodowana jako jedna z pierwszych informacji o typie ciągu, może po prostu pominąć tę liczbę bajtów i przejść do następnego pola. W przeciwnym razie będzie musiał iterować po całym ciągu, aż znajdzie koniec ciągu.

W celu zapewnienia zgodności MongoDB jest napisany w C++, gdzie ciągi są zakończone zerem . Może odciąć ten terminator null, aby zaoszczędzić jeden bajt, ponieważ długość jest zakodowana, ale uzyskanie tego łańcucha z BSON do formatu, który można wykorzystać w C++, wymagałoby ponownego włączenia tego null. Będzie to wymagało wyspecjalizowanej procedury obsługi ciągów znaków, której jedyną zaletą jest zapisanie jednego bajtu.

Ogólnie uznano, że „marnowanie” jednego bajtu jest akceptowalnym kompromisem.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. console.log nie wyświetla oczekiwanych właściwości obiektu

  2. Pętla powolnej aktualizacji Mongodb

  3. Jak napisać funkcję-y akceptującą parametr-fct_x, która uzyskuje dostęp do zmiennej-a, która musi być zdefiniowana w funkcji-y?

  4. Windows IoT — Mongodb — Malina

  5. MongoDB wstępnie ładuje dokumenty do pamięci RAM, aby uzyskać lepszą wydajność