gora-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Carlos Muñoz (JIRA) <j...@apache.org>
Subject [jira] [Commented] (GORA-444) Add #size() to Result API
Date Sun, 11 Mar 2018 16:53:00 GMT

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

Carlos Muñoz commented on GORA-444:
-----------------------------------

Hi [~lewismc],

I have been playing with Apache Gora as a preparation for my GoSC application in GORA-535
and I would like to tackle this issue because it is closely related to backends development.
This is what I found so far.

The implementation of a size() function in the Result API would be straightforward in most
of the backends because either they already have internal size variables or they use lists/sets
to store results. These backend are:
|*Backend*|*Results list/size variable*|*Size() implementation*|
|[Aerospike|https://github.com/apache/gora/blob/master/gora-aerospike/src/main/java/org/apache/gora/aerospike/query/AerospikeQueryResult.java]|List<AerospikeResultRecord>
resultRecords;|resultRecords.size();|
|[Cassandra|https://github.com/apache/gora/blob/master/gora-cassandra/src/main/java/org/apache/gora/cassandra/query/CassandraResultSet.java]|int
size|size;|
|[CouchDB|https://github.com/apache/gora/blob/master/gora-couchdb/src/main/java/org/apache/gora/couchdb/query/CouchDBResult.java]|List<Map>
result;|result.size();|
|[DynamoDB|https://github.com/apache/gora/blob/master/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/query/DynamoDBResult.java]|List<T>
dynamoDBResultSet;|dynamoDBResultSet.size();|
|[Infinispan|https://github.com/apache/gora/blob/master/gora-infinispan/src/main/java/org/apache/gora/infinispan/query/InfinispanResult.java]|List<T>
list;|size(); //already implemented|
|[JCache|https://github.com/apache/gora/blob/master/gora-jcache/src/main/java/org/apache/gora/jcache/query/JCacheResult.java]|NavigableSet<K>
cacheKeySet;|cacheKeySet.size();|
|[MongoDB|https://github.com/apache/gora/blob/master/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBResult.java]|int
size;|size;|
|[OrientDB|https://github.com/apache/gora/blob/master/gora-orientdb/src/main/java/org/apache/gora/orientdb/query/OrientDBResult.java]|int
size;|size;|
|[Solr|https://github.com/apache/gora/blob/master/gora-solr/src/main/java/org/apache/gora/solr/query/SolrResult.java]|SolrDocumentList
list;|list.size();|
|[Avro|https://github.com/apache/gora/blob/master/gora-core/src/main/java/org/apache/gora/avro/query/DataFileAvroResult.java]|long
start;
 long end;|end-start;|

Other internal implementations:
|*Backend*|*Results list/size variable*|*Size implementation*|
|[Mock|https://github.com/apache/gora/blob/master/gora-core/src/test/java/org/apache/gora/mock/store/MockDataStore.java]
*Test|…|return 0;|
|[Mem|https://github.com/apache/gora/blob/master/gora-core/src/main/java/org/apache/gora/memory/store/MemStore.java]|NavigableMap<K,
T> map;|return map.size();|

However, other backends rely on Scanners implementations which cannot provide size()-like
functions for performance reasons. These backends are:
|*Backend*|*Data*|
|[Accumulo|https://github.com/apache/gora/blob/master/gora-accumulo/src/main/java/org/apache/gora/accumulo/query/AccumuloResult.java]|RowIterator
iterator;|
|[HBase|https://github.com/apache/gora/blob/master/gora-hbase/src/main/java/org/apache/gora/hbase/query/HBaseGetResult.java]|Result
result;|
|[HBase|https://github.com/apache/gora/blob/master/gora-hbase/src/main/java/org/apache/gora/hbase/query/HBaseScannerResult.java]|ResultScanner
scanner;|
|[Avro|https://github.com/apache/gora/blob/master/gora-core/src/main/java/org/apache/gora/avro/query/AvroResult.java]|DatumReader<T>
reader;|

For thoses backends we could use one of the following strategies:
 * Return a constant value such 0 or -1 (approach used by getProgress() implementation).
 * Throw an exception to indicate that the operation is not supported.
 * Use a duplicated Scanner just for counting how many next() could be performed (I know it
is a very bad idea).

> Add #size() to Result API
> -------------------------
>
>                 Key: GORA-444
>                 URL: https://issues.apache.org/jira/browse/GORA-444
>             Project: Apache Gora
>          Issue Type: New Feature
>          Components: gora-core
>            Reporter: Lewis John McGibbney
>            Priority: Minor
>             Fix For: 0.9
>
>
> Right now we iterate through results by doing 
> {code}
> while (results.next()) {
>    ...
> }
> {code}
> It is a pain to always require a counter of sorts and would be much more intuitive to
provide a simple #size() method.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message