New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement multi-range slice queries for CQL storage implementation #3816
Comments
I think also the main performance problem for retrieving selected properties via different slice queries is the fact that we await (block) until we fetch one property for all batched vertices and only then we request other vertices. If this process is parallel - we would have better performance for this case. |
…mnValueStore - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now Fixes JanusGraph#3824 Related to JanusGraph#3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…mnValueStore - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now Fixes JanusGraph#3824 Related to JanusGraph#3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…mnValueStore [cql-tests] [tp-tests] - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now Fixes JanusGraph#3824 Related to JanusGraph#3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…mnValueStore [cql-tests] [tp-tests] - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now Fixes JanusGraph#3824 Related to JanusGraph#3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…mnValueStore [cql-tests] [tp-tests] - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now - Adds queries grouping algorithm (`MultiSliceQueriesGroupingUtil`) required for JanusGraph#3816 Fixes JanusGraph#3824 Related to JanusGraph#3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
I think I'm stuck with this issue. In #3825 I'm experimenting with benchmarks and I find that retrieving all columns for many cases is much faster than retrieving only necessary columns. If we retrieve all 100 properties via a single query the benchmark is like below:
Benchmarks to retrieve multiple specific properties (2 properties, 3 properties, 12 properties, 24 properties) is like below:
It shows that retrieving all 100 String properties (each 42-44 chars in size) is faster than retrieving 24 properties. I didn't investigate why exactly, but I guess each CQL query adds some overhead and slows down the channel (just assumption). Nevertheless, if anyone has any ideas or thoughts, please, let me know. |
I converted this issue into CQL related issue because I think with #3825 each storage backend will be responsible for deciding how exactly it's better to fetch multiple slices. |
…mnValueStore [cql-tests] [tp-tests] - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now - Adds queries grouping algorithm (`MultiSliceQueriesGroupingUtil`) required for JanusGraph#3816 Fixes JanusGraph#3824 Related to JanusGraph#3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…mnValueStore [cql-tests] [tp-tests] - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now - Adds queries grouping algorithm (`MultiSliceQueriesGroupingUtil`) (required for JanusGraph#3816 and also mimimizes keys duplicate collections creation) Fixes JanusGraph#3824 Related to JanusGraph#3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…mnValueStore [cql-tests] [tp-tests] - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now - Adds queries grouping algorithm (`MultiSliceQueriesGroupingUtil`) (required for JanusGraph#3816 and also mimimizes keys duplicate collections creation) Fixes JanusGraph#3824 Related to JanusGraph#3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
I started wondering if we really need to execute range when the difference between |
This theory works for properties with cardinality Single. Benchmark tests can be compared to benchmarks provided in the PR:
|
Tested with SET / LIST properties - it doesn't work. Thus, the optimization with |
…operties fetching Related to JanusGraph#3816 (partially resolves the issue, but only for SINGLE properties use-cases) Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…operties fetching [cql-tests] [tp-tests] Related to JanusGraph#3816 (partially resolves the issue, but only for SINGLE properties use-cases) Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…operties fetching [cql-tests] [tp-tests] Related to JanusGraph#3816 (partially resolves the issue, but only for SINGLE properties use-cases) Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…mnValueStore [cql-tests] [tp-tests] - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now - Adds queries grouping algorithm (`MultiSliceQueriesGroupingUtil`) (required for JanusGraph#3816 and also mimimizes keys duplicate collections creation) Fixes JanusGraph#3824 Related to JanusGraph#3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…mnValueStore [cql-tests] [tp-tests] - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now - Adds queries grouping algorithm (`MultiSliceQueriesGroupingUtil`) (required for JanusGraph#3816 and also mimimizes keys duplicate collections creation) Fixes JanusGraph#3824 Related to JanusGraph#3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…mnValueStore [cql-tests] [tp-tests] - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now - Adds queries grouping algorithm (`MultiSliceQueriesGroupingUtil`) (required for JanusGraph#3816 and also mimimizes keys duplicate collections creation) Fixes JanusGraph#3824 Related to JanusGraph#3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…mnValueStore [cql-tests] [tp-tests] - Adds possibility to execute groups of same key sets slice queries together - Implement parallel execution of all provided Slice queries to CQL storage backend - Adds a basic implementation (i.e. current non-optimized implementation) to any other storage backend which doesn't have optimized implementation right now - Adds queries grouping algorithm (`MultiSliceQueriesGroupingUtil`) (required for #3816 and also mimimizes keys duplicate collections creation) Fixes #3824 Related to #3816 Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…operties fetching [cql-tests] [tp-tests] Related to JanusGraph#3816 (partially resolves the issue, but only for SINGLE properties use-cases) Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…operties fetching [cql-tests] [tp-tests] Related to JanusGraph#3816 (partially resolves the issue, but only for SINGLE properties use-cases) Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…operties fetching [cql-tests] [tp-tests] Related to JanusGraph#3816 (partially resolves the issue, but only for SINGLE properties use-cases) Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…operties fetching [cql-tests] [tp-tests] Related to JanusGraph#3816 (partially resolves the issue, but only for SINGLE properties use-cases) Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…operties fetching [cql-tests] [tp-tests] Related to JanusGraph#3816 (partially resolves the issue, but only for SINGLE properties use-cases) Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…operties fetching [cql-tests] [tp-tests] Related to JanusGraph#3816 (partially resolves the issue, but only for SINGLE properties use-cases) Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
…operties fetching [cql-tests] [tp-tests] Related to #3816 (partially resolves the issue, but only for SINGLE properties use-cases) Signed-off-by: Oleksandr Porunov <alexandr.porunov@gmail.com>
Discussion: #3812
As for now JanusGraph can fetch requested properties either using a separate slice query per each property or using a single slice query to fetch all vertex properties. The user should always weight pros and cons of each approach and decide how they want to fetch those properties.
With multiple ranges per single slice query it will be possible to fetch only requested set of properties in a single slice query. Thus, the user won't need to decide between trade-offs of each solution.
The text was updated successfully, but these errors were encountered: