Skip to content

[Question] StreamingMerge Entrypoint #355

Description

Hi!

The FreshDiskANN paper outlines the StreamingMerge procedure. In combing through the codebase (main @ f8ef303), there doesn't appear to be a singular entrypoint that allows a caller to utilize the FreshDiskANN API contract without being aware of all the types of indices.

  • test_streaming_scenario.cpp outlines how to build an in-memory index that supports inserts and deletes.
  • build_stitched_index.cpp outlines how to merge indices
  • search_disk_index.cpp demonstrates how to run a search across an index that is stored on disk.

Given a client that provides a memory budget and no starting list of vectors, my reading of the paper would indicate the following needs to be done in a wrapping class:

  1. create an empty, streaming enabled, in-memory index that holds writes - this is outlined in test_streaming_scenario.cpp and is the only sink for insertions.
  2. create an empty, SSD resident index, which is demonstrated by build_disk_index.cpp... this index would not have a true build phase as there is nothing to add.
  3. once the mutable index in [1] is full, merge [1] and [2] using the routine outlined in merge_shards within disk_utils.h - during the merge process, we would have already created a new mutable in-memory index for any in-flight writes + deletes.
  4. separately, maintain a list of deletions that are used for filtering within all live indices.

I would be happy to submit a patch that unifies the above in such a way that a caller can just create an Index and not have to worry about RO-TempIndex, RW-TempIndex and the SSD-Resident Index; however, I would like to confirm that my read on the current codebase is correct in that there is no singular entrypoint for this.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions