MatrixStore can be accessed in a programmatic manner in applications using MatrixStore API or using the S3 protocol to communicate with S3Connect (MatrixStore S3 gateway)


In case you wonder whether you should use MatrixStore API or S3 protocol to access MatrixStore, this document provides some guidelines about which elements you should consider in your decision.


Metadata

MatrixStore API allows to add as many metadata entries as you want. With S3, the user-defined metadata is limited to 2 KB in size.


MatrixStore API allows you to update object's metadata at any moment. With S3, after you upload the object, you cannot modify object metadata. The only way to modify object metadata is to make a copy of the object and set the metadata again.


Search 

MatrixStore API allows you to search for objects based on metadata queries.  On the other hand,  search is not part of the S3 API, in AWS, you need extra services to provide that functionality.


Performance

MatrixStore API is based on a low-level protocol which is optimised for performance. As part of the protocol, the applications get automatic load-balancing and can communicate with all the nodes in a transparent way.

S3 protocol is based on http, which makes it suitable to Internet lines and long distances but it's not optimised for performance. The communication with S3 goes through S3Connect service which runs in a separate server from MatrixStore nodes so it can become a bottleneck if many requests are generated.


Quality of the Communication Lines 

MatrixStore API's underlying protocol is optimised for performance as described in the above paragraph, it's not designed for long distances or low-latency lines as opposed and S3 and other http-based protocol. Therefore, although MatrixStore API can work over VPN and some Internet lines, you may find that S3 works better in those scenarios.


Already Integrated with Amazon S3

If you already integrated with Amazon S3, it can be very easy to point to MatrixStore's S3Connect, reducing your development costs. This can bring the integration quicker to market, however, you won't benefit from all the features that MatrixStore provides.




Summary

In summary, we recommend you use MatrixStore API as a preference so you can benefit from all MatrixStore features. The cases where you should consider S3 are where the communication lines have low quality or you already integrated with S3 and need a working solution as soon as possible.