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
- API Design → Reference Java 1.1 SDK, Pymilvus SDK
- Initial version of the code, finish all the frameworks, including how the sdk communicate with milvus cluster, how we do unit test.
- Finish DDL, DML , Control API implementation
- Unit Test
- Usage examples
- API Document
- CI Test
Which C++ versions are we going to support?
Any Support C++ version above C++11. The Reason is that :
- Wider user range, as may organizations and devices support C++11.
- 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 usecamelBack
Test Plan
- Unit test
- C++ SDK will implement a mock milvus for basic testing, need to be tested with mainstream distributions(e.g. Ubuntu 18.04+, CentOS 7+)
- Start a standalone milvus complicated test.
- CI test
- Do we need to setup basic CI test for further improvement?
- Examples
- 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
...