Jeff, Unless you've got multiple different tables with different permissions to manage for different physical Accumulo users, the connector should probably be an instance variable in your service. It can be safely shared across all the reads as long as the Accumulo user configured in the connector has enough permissions to see what the users of your service need to see. The communication with the tablet servers doesn't happen until the scanner creation factory methods are called on connector and an iteration has been initiated over the them.
On Mon, May 19, 2014 at 10:29 PM, Jeff Schwartz <[email protected]>wrote: > Rookie Question... I've built a Query Service Layer (QSL) according to > the documentation from the Accumulo v1.6.0 User Manual. My question is how > often should I be getting a Zoo Keeper Instance and Connector to accumulo. > For example, here's some psuedo code for a typical service in my QSL. > > public void readTable(...) { > Instance instance = new ZooKeeperInstance(accumuloInstanceName, > zooServers); > Connector connector = instance.getConnector(username, passwordToken); > Scanner scanner = connector.getScanner(tableName, auths); > Scanner.setRange(range); > for (Map.Entry<Key,Value> entry : scanner) { > ... > } > scanner.close(); > } > > If I do these lines of code for every call in my restful service, then I > feel like that is generating a lot of extra connections to both zookeeper > and accumulo. Additionally, I would assume that that will have a negative > impact on performance. Should I cache any connectors or ZooKeeper > instances? > > Any suggestions or best practices would be greatly appreciated. > > Thanks in advance. > > Sincerely, > Jeff Schwartz >
