what is the buffering of bufferInsert() in write node during upsert? #37375
Unanswered
ron-gilaad
asked this question in
Q&A and General discussion
Replies: 1 comment 1 reply
-
There are acaully two parts of the growing data. One on Querynode, which is SegmentGrowingImpl. The other part is on datanode, which is write buffer you've seen. Ideally there should be only one place hold all the growing data, that's why we introduce streaming node which handles both growing segment read and flush at one place. But right now the new written is duplicated in both querynode and datanode |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Hi, in the logs of Milvus when executing upsert, I see the printings of:
[writebuffer/write_buffer.go:539] ["add growing segment"]
[segments/segment.go:311] ["create segment"]
[writebuffer/l0_write_buffer.go:229] ["Add a new level zero segment"]
These printings I assume originated by BufferData() which was called by writeNode Operate()
The BufferData() interface is implemented by two different buffer types: bfWriteBuffer and l0WriteBuffer.
Both implementations calls bufferInsert() to: buffer insert data and add segment if not exists.
Can you please explain what is this buffering that bufferInsert does? and what is segBuf in it?
Is it the growing segment? and if so: why the data is inserted again in InsertNode later in the code
in the SegmentGrowingImpl.Insert() CPP code.
Is this the case:
InsertBuffer handles initial buffering.
InsertNode/SegmentGrowingImpl integrates data into the segment in an organized format.
Delegator ensures the final steps to make the segment fully available for querying.
Beta Was this translation helpful? Give feedback.
All reactions