code: public void update(Data... records) throws IOException {
          // ############ reorder data
          IntObjectOpenHashMap<ArrayList<Data>> bucketDataMapping = new IntObjectOpenHashMap<ArrayList<Data>>();
          int bucketId;
          for (Data d : records) {
              bucketId = hashFunction.getBucketId(d.getKey());
              if (!bucketDataMapping.containsKey(bucketId)) {
                  bucketDataMapping.put(bucketId, new ArrayList<Data>());
              }
              bucketDataMapping.get(bucketId).add(d);
          }
  
          for (IntObjectCursor<ArrayList<Data>> entry : bucketDataMapping) {
              UpdateOnlySynchronizer<Data> synchronizer = new UpdateOnlySynchronizer<Data>(gp.DATABASE_DIRECTORY + "/"
                      + hashFunction.getFilename(entry.key), gp);
              @SuppressWarnings("unchecked")
              Data[] toUpdate = (Data[]) entry.value.toArray(new AbstractKVStorable[entry.value.size()]);
              Arrays.sort(toUpdate, new AbstractKVStorableComparator());
              synchronizer.upsert(toUpdate);
          }
      }
docs: Updates the given data. Be careful, ONLY updates are provided. If the given array contains elements, which are
  not already stored in the underlying DRUMS-table, they will be not taken into account during synchronization.<br>
  <br>
  This method uses the {@link UpdateOnlySynchronizer}, which by itself uses the Data's implemented update-function
  ({@link Data#update(AbstractKVStorable)}) to update elements. If you want to merge objects, use
  {@link #insertOrMerge(Data ...)} instead.
  
  @param records
  the data to update
  
  @throws IOException