[ 
https://issues.apache.org/jira/browse/CASSANDRA-18248?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17696079#comment-17696079
 ] 

Benedict Elliott Smith commented on CASSANDRA-18248:
----------------------------------------------------

If looking at improving performance of query building - which I think we 
_should_ do, as there are cases where it causes problems - it would be nice to:

1. Remove String.format calls, e.g. 
[here|https://github.com/apache/cassandra/blob/530bc10bd0a053f5dcd8439fd3f5c72cd7952ea6/src/java/org/apache/cassandra/cql3/Tuples.java#L51]
2. Memoize `AbstractType.toString` as we invoke it in 
`ResultSet.computeResultMetadataId`

For non-prepared statement workloads these show up _very clearly_ in traces, 
which was noticed in some internal testing of Accord that wasn't preparing its 
statements.

I would say that, regarding the use of streams, is that it is _less_ idiomatic 
to use streams than to not, and that replacing simple streams with simple loops 
should not be a very contentious change. Though I agree that in query parsing 
they may not be very impactful, were I to write query parsing code from scratch 
I would expect streams not to be used - query parsing _is_ hot code in my 
opinion, e.g. when the parsed statement cache overflows due to user workloads.

> Consider avoiding streams on query building
> -------------------------------------------
>
>                 Key: CASSANDRA-18248
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-18248
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Berenguer Blasi
>            Priority: Normal
>              Labels: low-hanging-fruit
>
> During the review of CASSANDRA-18068 it was discussed whether preparing 
> queries might be considered a hot path or not. Seen in isolation it isn't. 
> But given multi-tenancy setups i.e. and coming from the experience of seeing 
> how prepare is used by some customers as per some bug reports this might not 
> be 100% true
> Let's discuss here if removing streams would make any sense. Most rewrites I 
> expect wouldn't impact readability. [~adelapena] took a first stab and 
> compiled a first list of candidates:
>  * 
> [o.a.c.cql3/CQL3Type.java#L840|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/CQL3Type.java#L840]
>  * 
> [o.a.c.cql3/CQL3Type.java#L876|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/CQL3Type.java#L876]
>  * 
> [o.a.c.cql3/Lists.java#L133|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/Lists.java#L133]
>  * 
> [o.a.c.cql3/Sets.java#L123|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/Sets.java#L123]
>  * 
> [o.a.c.cql3/MultiColumnRelation.java#L225|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/MultiColumnRelation.java#L225]
>  * 
> [o.a.c.cql3/QueryProcessor.java#L481|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L481]
>  * 
> [o.a.c.cql3/TokenRelation.java#L138|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/TokenRelation.java#L138]
>  * 
> [o.a.c.cql3/conditions/ColumnConditions.java#L75|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/conditions/ColumnConditions.java#L75]
>  * 
> [o.a.c.cql3/functions/AbstractFunction.java#L69|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/functions/AbstractFunction.java#L69]
>  * 
> [o.a.c.cql3/functions/FunctionResolver.java#L203|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/functions/FunctionResolver.java#L203]
>  * 
> [o.a.c.cql3/functions/UDAggregate.java#L97|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/functions/UDAggregate.java#L97]
>  * 
> [o.a.c.cql3/restrictions/StatementRestrictions.java#L380|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java#L380]
>  * 
> [o.a.c.cql3/selection/AbstractFunctionSelector.java#L72|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/selection/AbstractFunctionSelector.java#L72]
>  * 
> [o.a.c.cql3/selection/MapSelector.java#L113|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/selection/MapSelector.java#L113]
>  * 
> [o.a.c.cql3/selection/Selectable.java#L708|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/selection/Selectable.java#L708]
>  * 
> [o.a.c.cql3/selection/Selectable.java#L793|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/selection/Selectable.java#L793]
>  * 
> [o.a.c.cql3/selection/Selectable.java#L886|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/selection/Selectable.java#L886]
>  * 
> [o.a.c.cql3/selection/Selectable.java#L954|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/selection/Selectable.java#L954]
>  * 
> [o.a.c.cql3/selection/Selectable.java#L1024|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/selection/Selectable.java#L1024]
>  * 
> [o.a.c.cql3/statements/SelectStatement.java#L1278|https://github.com/apache/cassandra/blob/cassandra-4.1.0/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java#L1278]



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to