Why do databases store data in B+ trees?

Поділитися
Вставка
  • Опубліковано 6 січ 2025

КОМЕНТАРІ •

  • @jatinrawat1047
    @jatinrawat1047 Рік тому +10

    was exploring mongodb internals and needed to understand why we use B+ trees.
    awesome explanation ,crisp and to the point !

  • @ViniciusdeSouzaFernandes-p8r
    @ViniciusdeSouzaFernandes-p8r Рік тому +5

    Absolutely clear your explanation. Very simple approach making all B-tree propose understandable. I was reading a advanced book where I was getting lack of information and motivation about how to range from a leaf like containing 101 to a leaf containing 601. Your example is very realistic providing easier understanding. Congrats, buddy!

  • @namangarg3933
    @namangarg3933 Рік тому +16

    Very well explained Arpit. Looking forward to more such videos.
    UA-cam is full of content and newbie creators.
    But, knowing the amount of research you put in your content coupled with your rich hands on experience, adds a tremendous confidence in whatever we learn from your channel.
    Thanks

    • @AsliEngineering
      @AsliEngineering  Рік тому +9

      Thanks for resonating 🙌 I ensure the correctness and in-depth understanding before making the video on it.
      Happy that you saw the efforts I have put in. Thanks again 🙌 will continue putting out videos on things that matter.

  • @sanjaysreedhar9162
    @sanjaysreedhar9162 3 місяці тому +2

    Good enough for interview preparations...thanks a lot

  • @shandoticwa
    @shandoticwa 19 днів тому

    To be precise: Most implementations of a dynamic multilevel index use a variation of the B-tree data structure called a B+-tree. The leaf nodes have an entry for every value of the search field, along with a data pointer to the record (or to the block that contains this record) if the search field is a key(uniquely identifies each row) field. For a nonkey search field, the pointer points to a block containing pointers to the data file records, creating an extra level of indirection.

  • @nishankgoyal8323
    @nishankgoyal8323 Рік тому +3

    Nice video, reminds me of how documents are stored in shelfs at my home. Containers saying what those documents are for say ITR, followed by files mentioning year blocks say 2010-2020, individual files and then individual documents.

  • @swati12091993
    @swati12091993 6 місяців тому +1

    These videos are extremely helpful. Makes me curious to explore more on my own. Thanks!

    • @AsliEngineering
      @AsliEngineering  6 місяців тому

      Amazing. Thats precisely the attitude I wanted to percolate. Thank you for resonating 👍

  • @aneksingh4496
    @aneksingh4496 Рік тому +1

    its very very deeply explained just like a good book author explains it .... highly Appreciate your efforts

  • @amitrastogi1405
    @amitrastogi1405 11 місяців тому

    Beautifully explained...hats off to you!

  • @arungowda
    @arungowda Рік тому +28

    Now I am slightly confused with indexing and storing rows as B+ trees 😂

    • @RaghvendraKumar-rm7tv
      @RaghvendraKumar-rm7tv Рік тому +10

      B+ Tree data structure is used to store both the row & index.
      Since every table has only one clustered index which determines how data is stored physically on the disk, in clustered index B+ tree will store the row data also.
      But in a non-clustered index, B+ tree will not have the actual row data but a pointer connecting it to the clustered index which has the actual data.

    • @harvendrasinghrathore2848
      @harvendrasinghrathore2848 11 днів тому +1

      ​@@RaghvendraKumar-rm7tvThanks man, nice explanation

  • @alejandrogarcia3004
    @alejandrogarcia3004 Рік тому

    loved your easy to understand explanation, thanks a lot for the new perspective on this!

  • @nehagour6928
    @nehagour6928 2 місяці тому +2

    Arpit, great explanation!
    I have a few questions:
    1. Do you think the "1|101" information isn't fully utilizing the 4KB size?
    2. What happens if the 4KB space is full and we need to add more data to a leaf node?
    3. How does the system balance things if the leaf node (e.g., 1-100) is full and we need to add 8 more rows in between? Would we need to move data to another node?

    • @srinivassairamsampathirao5767
      @srinivassairamsampathirao5767 2 місяці тому

      don't know about 1 but
      2. a new node is added to the b+ tree based on the range it lies
      3. i think it will be handled in such a way that the no. of rows that are admissible to be put in a row shouldn't exceed 4kb size. ie sizeof(1|101)

  • @sanketh768
    @sanketh768 10 місяців тому +3

    Sir , I'm not able to imagine things when you say b tree is serialised and stored in the disk. Could someone please help me understand this better and visualize this?

    • @AsliEngineering
      @AsliEngineering  10 місяців тому +2

      each node is B+ tree is stored in one disk block. naive way to image each node in b+ tree as one separate file on the disk.

  • @manukolathur4029
    @manukolathur4029 Рік тому

    Simple and clear !!!!. Looking for more of these kinds...

  • @gomzysharma
    @gomzysharma 3 місяці тому

    So wonderful, very digestible content

  • @yuktigirdhar
    @yuktigirdhar 2 місяці тому +2

    You mentioned in the first approach that while updating a row we cannot automatically move beyond the the size of the width of the row but later as you mentioned we have a fixed row size so in what case we will be exceeding the width and overwriting other data for the naive file storage approach?

    • @recap6569
      @recap6569 10 днів тому

      hey did u get the answer of ur problem ? ... i hv the same doubt

  • @pankajvermacr7
    @pankajvermacr7 11 місяців тому

    Amazing, I really appreciate your effort, the way you teach us, is great Thanks man.

  • @rahulsarkar4206
    @rahulsarkar4206 Рік тому +4

    A video suggestion. Difference between MySQL and Postgres. How they index differently and how that affects read, insert, update and delete query.

  • @sachinjindal4921
    @sachinjindal4921 Рік тому

    Great explanation Arpit👏

  • @AbhijeetBhattacharya-uh7dy
    @AbhijeetBhattacharya-uh7dy 6 місяців тому

    Awesome explanation! Thank you

  • @vaibhavghadge4057
    @vaibhavghadge4057 Місяць тому

    MongoDB does not use b+ tree
    In the b+ tree we have a duplicate node where the actual node is pointing to the leaf node from the leaf node we can directly get the value as well we can do range query as well

  • @sahazeerks2363
    @sahazeerks2363 Рік тому

    Awesome explanation, loved it

  • @unfiltered_with_yogi
    @unfiltered_with_yogi 2 місяці тому

    but for the file case also we can't we do a similar operation of reading the entire file, bringing it into memory and then shifting the data around and finally flushing it back to disk.
    What advantage does B+ tree offer, I mean the only one which I can think if is that in case of B+ tress you wont have to touch the entire data but rather only those specific 100 rows, then can't have a design where we store 100 rows on file and the next 100 on another file and achieve the same output/performance ?

  • @chandrachurmukherjeejucse5816
    @chandrachurmukherjeejucse5816 9 місяців тому

    Great content as always.

  • @vinitsunita
    @vinitsunita Рік тому

    Awesome explaination

  • @cooldudecs
    @cooldudecs Рік тому

    beautiful! This is so cool

  • @smritimittal4128
    @smritimittal4128 Рік тому +4

    For the first approach (discussed before B+ tree) -
    - All rows stored in a file
    - Can we not have 4KB (=disk block) sections each in that file too
    - If there were 1000 rows, then, each block is 100 rows now
    - so, to go through all of 1000 rows, I do 10 disk reads
    - hence, findOne is not O(n) but, O(no. of total disk blocks) ?
    - Also, when inserting -
    - Again, can we not put these 10 disk reads in RAM
    - re-arrange and flush all back to the file, the disk (similar to what we did for B+ tree) ?

    • @AsliEngineering
      @AsliEngineering  Рік тому +4

      1. that is exactly how disk io happens but how will you do random reads
      2. Today you are talking about 10, but you will not have just 40kb of data, it will go in GBs if not TBs. Then how will you do it?

  • @shashankhegde8365
    @shashankhegde8365 5 місяців тому

    Very insightful video. Could you please make a video explaining the internal functionality of graph databases..??

  • @32zim32
    @32zim32 3 місяці тому

    No need to do linear scan in sequential sorted rows. You can do binary search.

  • @rahulyadav8159
    @rahulyadav8159 Рік тому +1

    One question here Arpit
    Leaf nodes of the tree contains the actural rows of table. So leafs nodes are efficiently utilizing the disk block size.
    But the internal nodes of the tree contains the child and their node information. So it seems internal nodes of the tree is not fully uitlizing the disk block size.
    So overall if we have more interanl nodes then we are un nessessarly wasting the disk block.
    Please let me know if I am thinking in right direction.

    • @Goku-xm1gq
      @Goku-xm1gq Рік тому +1

      this is a trade off made in order to achieve better performance and efficient range searches

  • @darshanv1748
    @darshanv1748 Рік тому +2

    I have a doubt , if i insert another row in row 195 then all the next rows should also move forward (you have to do the same in B Trees also right ?) , i don't get how btrees solve this problem

    • @snehagupta1044
      @snehagupta1044 8 місяців тому

      exactly tree will store the pointer to the data not the entire data

    • @codr0514
      @codr0514 3 місяці тому +2

      For this very reason, indexes, such as B+ Trees, perform poorly in write-heavy systems. Indexes are primarily designed to enhance lookup speeds (reads), not writes. This inefficiency arises because each insert, update, or delete operation may require rearranging the tree to maintain its balanced nature. This rearrangement often involves splitting or merging nodes and updating pointers, which can be time-consuming. It is crucial to carefully consider the required access patterns and create only the necessary minimum number of indexes on a table.

  • @ronak6977
    @ronak6977 4 місяці тому

    Why AVL trees are not used as for them also time complexity is log(n)?

  • @abhishekpathania7093
    @abhishekpathania7093 2 місяці тому

    doubt,
    so now 1st leaf node (block) contains 3 rows,
    when we update its 1st row to an extent that it occupies whole space of the node leaf (block),
    will the rebalancing happen on the 1st leaf node & a new node will be created for 2nd & 3rd row ?
    how will this look like ?

    • @AsliEngineering
      @AsliEngineering  2 місяці тому +1

      Read more about B+ Trees, you will answers to all the questions you've asked.

  • @santoshbhatnagar2155
    @santoshbhatnagar2155 Рік тому +1

    Hi @Arpit just asking out of curiosity can one see the internal implementation of storage of data in a database?

  • @mohdhaseeb9818
    @mohdhaseeb9818 Рік тому +1

    Thank you sir!!

  • @vishnuaggarwal1132
    @vishnuaggarwal1132 Рік тому +1

    Can you share the Notes
    unable to download them from your website

  • @deepeshtyagi8824
    @deepeshtyagi8824 Місяць тому

    How can I get your notes

  • @punruthaan
    @punruthaan 3 місяці тому

    Hey Arpit - Help me to understand the case, when DB update and insert operation cannot take place in the given block due to limited space in the block then how DB manages insert and updates in such scenarios ?

    • @FullGardenStudent
      @FullGardenStudent 2 місяці тому

      how the dataBase manages that depends on how the database handles memory management. It could either reallocate bigger memory region and move the existing data over there or it might fill up any empty gaps caused by fragmentation within the existing memory region.

  • @codepractices7
    @codepractices7 Рік тому +2

    Can Clustered and Non-clustered index be related to B+ tree store of the database?
    Like for instance if we create a primary key then a clustered index is created on that, and inside the index, pointers to the block stored. So is that pointer pointing to the leaf node of the B+ tree?

    • @AsliEngineering
      @AsliEngineering  Рік тому

      Indexes are implemented as B+ trees. Indexes are implicit tables with 2 columns (indexed value and row id). Storage is very similar to how a table is stored.

    • @arungowda
      @arungowda Рік тому +1

      @@AsliEngineering so the numbers 100,200..500 you talked about in the video, are they row Ids?
      when we index on a column, does it store a mapping of that column to rowId in B+ trees? In which case it has to do the B+ tree search?
      Or is the index a mapping of column to physical address on the disk?

  • @Jagrati
    @Jagrati 3 місяці тому

    Somehow, I am naturally very curious about how various kinds of databases/use cases store data at the lowest level i.e. disk level/SSD level.
    How various social websites/apps model and store list of followers/followees of a user? because after each friend request, this entire list changes.
    Sources of my confusion:
    (1) If we store this entire data in one field, that field will keep changing.Do relational databases even provide such variable length field(I know varchar,string etc, but that doesnt seem right data structure for this, to begin with)
    (2) instagram I read some time back uses postgres. How does postgres model such variable length field?
    (3) is there any social platform which uses nosql just to meet this criteria. That would sound funny though.
    (4) I am inclined to split the discussion into 2 parts :
    (a) When this field will be updated in-place like regular B+ tree, then a separate block might be needed to be allocated everytime, the new field size causes the block to expand.
    (b) if we use a database which uses sstable/memtable, and argue that anyway the field will be appended after every change, still we will cause intentional appending of this entire field(list of complete followers/followees after each new friend request) very frequently.
    (5) Some reference from real world use cases of how actual systems implement this in practice, will be very useful. Given your vast readings, I am sure you will be able to add value to it.
    (6) graph databases might be an option, but in real practice, are there social apps which use graph database for this use case?
    Thanks a lot!,
    If you find the doubt generic enough, you might make content for general consumption.
    Jagrati

  • @anupampandey3758
    @anupampandey3758 8 днів тому

    awesome!

  • @jagannathprasaddas1636
    @jagannathprasaddas1636 Рік тому

    Does a DBMS behave more intelligent than an os by bypassing the filesystem I/O? If yes what is the system call for reading writing to disk block from user space?

  • @binitrajshah9354
    @binitrajshah9354 Рік тому

    In case of update still we can face same issue of overflow which implies time complexity to O(n). How B+ trees handle this situation?
    I mean new update might have larger value and my leaf node is already fully occupied.

  • @rahulmenon5149
    @rahulmenon5149 10 місяців тому

    do the leaf nodes contain data or pointers to actual data ?
    I read in other places - its pointers

    • @AsliEngineering
      @AsliEngineering  10 місяців тому

      No. It is data. Read about the clustered index and how tables store data in the clustered index.

  • @gauravsharma3142
    @gauravsharma3142 10 місяців тому

    If a table has too many columns such as the data in each row exceeds 4kb of block size
    Will that block size will be of bigger value
    Or the databse will partition the row on basis of columns

  • @siddhantchavan1370
    @siddhantchavan1370 11 місяців тому

    I wanna learn more about this, any good references?

  • @learnwithme7750
    @learnwithme7750 Рік тому +1

    Hey Arpit
    Really good content..but one doubt in findById when we reach the leaf node of B+ tree then to search a particular should we need to traverse one by one or we can use binary search as well to reach a particular node?

    • @DurgeshYadav-bc5nm
      @DurgeshYadav-bc5nm Рік тому

      It's not ordered, so the search has to be linear. As the nodes can be scattered anywhere.. like.. imagine linked lists

  • @prashantshubham
    @prashantshubham Рік тому

    Great detailed video, thanks Arpit. Had one doubt if you can explain:
    At one point we're saying when we're finding one by Id = 3 it does 3 disk reads from root of the tree to leaf node, but isn't there caching involved and indexes are cached in memory so that the disk reads are avoided also is the caching involved only after 1st call is done pertaining to a row/table or are the indexes cached as soon as DB is ready to take reads/writes?

  • @butterhalves4262
    @butterhalves4262 Рік тому

    awesome.

  • @itsthesecondchannel
    @itsthesecondchannel Рік тому

    Thank you

  • @subee128
    @subee128 5 місяців тому

    Thanks

  • @ankuragarwal9712
    @ankuragarwal9712 Рік тому

    At ua-cam.com/video/09E-tVAUqQw/v-deo.html -> are we assuming always that all B+ tree nodes will be part of one file therefore concluding that B+ tree leaf nodes contain offset of the next leaf node?

  • @saifulhasan2532
    @saifulhasan2532 Рік тому

    What if we want to search a name? How B+ tree will work?

    • @AsliEngineering
      @AsliEngineering  Рік тому

      same way, strings are comparable.

    • @saifulhasan2532
      @saifulhasan2532 Рік тому

      So tthey will have different indexing? And we would have another B+ tree@@AsliEngineering

  • @aayush7099
    @aayush7099 Рік тому

    Sir, What will happen we use B trees instead of B+ trees.

    • @AsliEngineering
      @AsliEngineering  Рік тому +8

      intermediate nodes bloat up (given data now resides there as well). This means it will take us to read more data from disk to reach rows present in the leaf.
      Performance will degrade.

  • @BugMug1996
    @BugMug1996 Рік тому +1

    Kya quality he bhaiya videos ki

  • @rjarora
    @rjarora Рік тому

    with all due respect, you should choose better topics for the videos