Features Roadmap

Here are features and solutions that are planned to be implemented in Clusterpoint database:

Clusterpoint version 4.2.5

On-premises Licensing System

Note: On-premises Licensing system will be activated with the Clusterpoint version 4.2.5.

Licensing system for on-premises installations will be activated with the next package release, it is done to improve and develop our product.
There are two License objects:
1. Serial number - user automatically receives serial number after package download. Note, Serial number has time limit.
2. License file - should be installed for long-term software usage, is based on server ID. User can get License file individually by contacting Clusterpoint Support.

For new installations: with the new package download you will receive a Serial number, it will be send to an email you provide on Download request page.

For all existing installations (v4.2.4 and older): you can continue to use existing software version, no changes are required until new package is updated. For more information please, contact Clusterpoint Support.

Clusterpoint version 4.3

User Authorization

Note: new User Authorization structure will be available with the Clusterpoint version 4.3.

We will introduce new user authorization and permission model, that consists of 4 objects:

1. Permission. Various database & collection permissions, special permissions (manager, administrator, etc.). All permissions have two possible values - allow and deny. Permissions can be assigned only to Roles, not to Users!
2. Role. Independent object, that contains list with assigned permissions. Roles can be assigned directly to Users or to Groups.
3. Group. Group is an object with assigned Roles, Users and other Groups.
4. User. User can be included into the Group, or Roles can be assigned to a user. If user has both - assigned Roles and Groups, then permissions are merged together.

User authorization and permission model for all existing users will be updated automatically.

Document Level Security

Note: DLS will be available with the Clusterpoint version 4.3.

Note: DLS is implemented only for v4 database version, not for v3!

Document Level Security (DLS) could be activated for each collection separately.

The main DLS permissions:
1. Permission to change Roles on existing documents.
2. Enforce access on documents, control access for individual documents in collection.

Clusterpoint version 4.4

Update Where

Note: UPDATE WHERE feature will be available with the Clusterpoint version 4.4.

An example of a document that represents a product. To increase price by $10 for all products that have limited availability, this is done with the following statement:

UPDATE product SET price = price + 10 WHERE availability = "Limited"

Delete Where

Note: DELETE WHERE feature will be available with the Clusterpoint version 4.4.

With a DELETE WHERE statement all documents matching some criteria can be deleted.

To delete all documents from product collection, which are out of stock it will be possible to use:

DELETE FROM product WHERE availability == "OutOfStock"

Insert .. Select

Note: INSERT .. SELECT feature will be available with the Clusterpoint version 4.4.

INSERT ... SELECT is extremely useful data manipulation operation, which inserts result of the SELECT statement into collection. Thus each item from the SELECT's result set becomes a new document.

For example, the following statement creates new offers collection selecting documents from products collection and applying discount to the price.

SELECT name, price * 0.9 
FROM product 
WHERE availability == "In Stock"

INSERT ... SELECT statement in efficient when used to insert documents in collection with auto-generated IDs, thus Clusterpoint will auto generated IDs that are local to the shards where they are created. This avoids unnecessary inter-cluster traffic.

Multi Aggregation

Note: Multi Aggregation will be available with the Clusterpoint 4.4 release.

Sometimes it is handful to compute multiple aggregations for the same result set. Using several queries would be wasteful. Thus JS/SQL allow to specify several SELECT ... GROUP BY clauses bridging with ALSO.

The following query will return products matching criteria and ordered by price, but then also compute several aggregations:

SELECT * FROM product
WHERE availability == "In Stock"
LIMIT 1000

Nested Documents

Note: Modification of nested documents without update of parent document will be available from Clusterpoint version 4.4.

Another powerful feature of Clusterpoint is nested documents. A particular document can contain multiple sub-documents with in. The sub-documents can be inserted and deleted independently of their super-document.

In NoSQL databases it is common to use denormalization due to absence of joins, thus grouping all relevant information in a single self-contained document. This is often efficient form retrieval perspective, but inefficient from update perspective, since modifying a document with nested structure requires reading and writing the whole document.

Nested documents solve this problem in an elegant way: you can add sub-documents to any particular document without reading or writing that document or any other of its sub-documents. However, at query time the entire family of sub-documents is accessible from the super-document.

Here is an example of how to insert a sub-document for a particular document:

INSERT INTO product["34940855"].inventory JSON VALUE {
  location: "Warehouse-3",
  count: 17

Note that sub-documents are always added to a particular super-document.

Another way to create sub documents is using a INSERT ... SELECT statement. For example, the following statements inserts derived object for every objects in source collection:

INSERT INTO source[parent].derived 
SELECT x+y AS z, PRIMARY_KEY() AS parent FROM source
WHERE x > 5

Note that in this case SELECT part of the statement yields a parent field, which specifies a particular document in source collection where sub-documents need to be nested.

Alternative way is to use UPDATE statement:

UPDATE source
derived.push({z: x+y})

In this case derived is a collection of nested objects that can be operated as an array in context of UPDATE.

Joining Nested Documents

Note: Joining collections through references will be available from Clusterpoint version 4.4.

The simplest form of joins is using the nesting structure of the documents and accessing sub-documents from their super document and vice versa.

Imagine the following example of single product document having several inventory sub-documents, inserted with the following statements:

INSERT INTO product["34A40855"] JSON VALUE {
  name: "Schwinn S29 Full Suspension Mountain Bike",
  price: 259.16

INSERT INTO product["34A40855"].inventory JSON VALUE {
  location: "Warehouse-East",
  items: 17

INSERT INTO product["34A40855"].inventory JSON VALUE {
  location: "Warehouse-West",
  items: 17

Then when selecting a product document, you can access array of nested inventory objects:

SELECT price, inventory
FROM product

And when selecting inventory objects you can access super-document with SUPER() function:

SELECT location, items, SUPER().name
FROM inventory
WHERE SUPER().price > 30