@Override public void storeIncomingStatistics( String guiPath, String accountName, Long timeperiod, String value, ValueType valueType, UnitType unitType) { Double valueDouble = LiveStatisticsUtil.parseDouble(value); Double calculatedValue = LiveStatisticsUtil.calculateValueBasedOnUnitType(valueDouble, unitType); long hoursSince1970 = timeperiod / 240; int fifteenSecondPeriodsSinceStartOfHour = LiveStatisticsUtil.getFifteensecondTimeperiodsSinceStartOfHour(timeperiod * 15); Bucket myBucket = null; try { myBucket = riakClient.fetchBucket(accountName + ";" + hoursSince1970).execute(); BasicMetricHour storedMetricHour = myBucket.fetch("" + guiPath, BasicMetricHour.class).execute(); if (storedMetricHour == null) { storedMetricHour = new BasicMetricHour( guiPath, accountName, hoursSince1970, valueType.toString(), unitType.toString()); } Double prevValue = storedMetricHour.getMetrics()[fifteenSecondPeriodsSinceStartOfHour]; if (prevValue == null) { storedMetricHour.getMetrics()[fifteenSecondPeriodsSinceStartOfHour] = calculatedValue; } else { storedMetricHour.getMetrics()[fifteenSecondPeriodsSinceStartOfHour] = LiveStatisticsUtil.calculateValueBasedOnValueType( prevValue, calculatedValue, valueType); } myBucket.store("" + guiPath, storedMetricHour).execute(); } catch (RiakRetryFailedException e) { e .printStackTrace(); // To change body of catch statement use File | Settings | File // Templates. } }