Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Current state: Accepted

...

We've seen many users demands for C++ SDK, it is probably the most useful SDK which could be used in distributed systems.

Public Interfaces

Client interfaces declaration:


Code Block
class MilvusClient {
 public:
    static std::shared_ptr<MilvusClient>
    Create();

    virtual Status
    Connect(const ConnectParam& connect_param) = 0;

    virtual Status
    Disconnect() = 0;

    virtual Status
    CreateCollection(const CollectionSchema& schema) = 0;

    virtual Status
    HasCollection(const std::string& collection_name, bool& has) = 0;

    virtual Status
    DropCollection(const std::string& collection_name) = 0;

    virtual Status
    LoadCollection(const std::string& collection_name, const TimeoutSetting* timeout) = 0;

    virtual Status
    ReleaseCollection(const std::string& collection_name) = 0;

    virtual Status
    DescribeCollection(const std::string& collection_name, CollectionDesc& collection_desc) = 0;

    virtual Status
    GetCollectionStatistics(const std::string& collection_name, bool do_flush, CollectionStat& collection_stat) = 0;

    virtual Status
    ShowCollections(const std::vector<std::string>& collection_names, CollectionsInfo& collection_desc) = 0;
};


Design Details

TODO lists

  1. API Design → Reference Java 1.1 SDK, Pymilvus SDK
  2. Initial version of the code, finish all the frameworks, including how the sdk communicate with milvus cluster, how we do unit test.
  3. Finish DDL, DML , Control  API implementation
  4. Unit Test 
  5. Usage examples
  6. API Document
  7. CI Test

Which C++ versions are we going to support?

Any Support C++ version above C++11. The Reason is that :

  1. Wider user range, as may organizations and devices support C++11.
  2. Easy to maintain as it will get a large group of developer support. 

OS platform to support

For the supported platform, need to be tested with mainstream distributions(e.g. Ubuntu 18.04+, CentOS 7+) using google tests.

Milvus cpp SDK 1.1 using cmake, and only build a shared library as output. In this new SDK for milvus 2, the user can choose which version to be built by setting cmake options. Quality gates such as clang-format, clang-tidy, cpplint are needed.

...

A basic rule of code style:

  • Namespace should use lower_case
  • Class should use CamelCase
  • Class member should use lower_case_ (with a underscore append)
  • Enum member should use UPPER_CASE
  • Function should use CamelCase, and the private member Function use camelBack

Test Plan

  1. Unit test
    1. C++ SDK will implement a mock milvus for basic testing, need to be tested with mainstream distributions(e.g. Ubuntu 18.04+, CentOS 7+)
    2. Start a standalone milvus complicated test.
  2. CI test 
    1. Do we need to setup basic CI test for further improvement?
  3. Examples
    1. finish all the examples in user guide and make sure it works like https://milvus.io/docs/v2.0.0/example_code.md

...

Released: with Milvus 2.1 

Authors:  @matrixji @ArkaprabhaChakraborty @yhmo

...