ACID Compliance for Milvus

We are trying to assess Milvus as a database. One of the key questions was around ACID compliance. based on what I understand Consistency is something that Milvus does not comply to by default because of Bounded Consistency. To be able to meet Consistency of ACID - i need to configure Consistency to Strong Consistency. Is this correct understanding.

Also I tried to summarize understanding of how Milvus can be ACID compliant. Are these points correct?

Atomicity:
The requests’ execution order is strictly in accordance with their issue-time order.

For a batch request, all its sub-requests share the same issue time. In cases there are multiple proxies, issue time from different proxies are regarded as coming from a central clock. A batch insert/delete is guaranteed to become visible atomically.

Consistency:

  • Milvus supports 4 levels of consistency that can be configured based on use case - Link:milvus.io/blog/2022-1-27-milvus-2-0-a-glimpse-at-new-features.md#Consistency-level

  • Consistency can be set to strong to force to meet the consistency requirements for ACID if needed

  • However – vector database use cases usually have a tolerance for eventual consistency where performance is valued over some consistency. Parameter exists to guarantee consistency within a tolerable range

Isolation:

  • Based on my understanding - in Milvus maintain a global timestamp for all data insertion requests. This should guarantee there is a specific order for all transactions. To achieve true isolation, I believe we also need to set the Consistency Level to Strong.
    Link://milvus.io/blog/deep-dive-4-data-insertion-and-data-persistence.md#Root-coord-and-Time-Tick

Durability:

  • Based on my understanding Milvus Durability guarantee is not there by default, but has to be forced programmatically if required.

“Milvus returns success when inserted data is loaded to the message queue. However, the data is not yet flushed to the disk. Then Milvus’ data node writes the data in the message queue to persistent storage as incremental logs. If flush() is called, the data node is forced to write all data in the message queue to persistent storage immediately.”

Posting discussion in Github in case other people ended up here - ACID Compliance for Milvus 2.0 · Discussion #16651 · milvus-io/milvus · GitHub