Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Serialization optimization for UUID keys. #94

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

joval
Copy link

@joval joval commented Sep 4, 2012

Hi Jan,

This is a change from a user who follows my clone of JDBM. I think it looks like a good change; you might want to consider merging it yourself.

Here is the diff ignoring whitespace changes:

diff --git a/src/main/java/org/apache/jdbm/Serialization.java b/src/main/java/org/apache/jdbm/Serialization.java
index b8fccce..0e1d56a 100644
--- a/src/main/java/org/apache/jdbm/Serialization.java
+++ b/src/main/java/org/apache/jdbm/Serialization.java
@@ -263,6 +263,10 @@ public class Serialization extends SerialClassInfo implements Serializer {
out.write(DATE);
out.writeLong(((Date) obj).getTime());
return;

  •    } else if (clazz == UUID.class) {
    
  •        out.write(UUID);
    
  •        serializeUUID(out,(UUID) obj);
    
  •        return;
     } else if (clazz == BTree.class) {
         out.write(BTREE);
         ((BTree) obj).writeExternal(out);
    

    @@ -407,6 +411,12 @@ public class Serialization extends SerialClassInfo implements Serializer {

    }

  • private void serializeUUID(DataOutput out, UUID uuid) throws IOException

  • {

  •   out.writeLong(uuid.getMostSignificantBits());
    
  •   out.writeLong(uuid.getLeastSignificantBits());
    
  • }

  • private void serializeMap(int header, DataOutput out, Object obj, FastArrayList objectStack) throws IOException {
    Map l = (Map) obj;
    out.write(header);
    @@ -432,7 +442,6 @@ public class Serialization extends SerialClassInfo implements Serializer {
    out.write(b);
    }

 private void writeLongArray(DataOutput da, long[] obj) throws IOException {
     long max = Long.MIN_VALUE;
     long min = Long.MAX_VALUE;

@@ -824,6 +833,9 @@ public class Serialization extends SerialClassInfo implements Serializer {
case DATE:
ret = new Date(is.readLong());
break;

  •        case UUID:
    
  •           ret = deserializeUUID(is);
    
  •           break;
         case ARRAY_INT_B_255:
             ret = deserializeArrayIntB255(is);
             break;
    

    @@ -1068,6 +1080,11 @@ public class Serialization extends SerialClassInfo implements Serializer {
    return ret;
    }

  • private UUID deserializeUUID(DataInput is) throws IOException

  • {

  •   return new UUID(is.readLong(), is.readLong());
    
  • }

private int[] deserializeArrayIntB255(DataInput is) throws IOException {
int size = is.readUnsignedByte();
if (size < 0)
diff --git a/src/main/java/org/apache/jdbm/SerializationHeader.java b/src/main/java/org/apache/jdbm/SerializationHeader.java
index e3ec45c..8e86836 100644
--- a/src/main/java/org/apache/jdbm/SerializationHeader.java
+++ b/src/main/java/org/apache/jdbm/SerializationHeader.java
@@ -120,6 +120,7 @@ final class SerializationHeader {

final static int CLASS = 126;
final static int DATE = 127;

  • final static int UUID = 128;

static final int JDBMLINKEDLIST = 159;
diff --git a/src/test/java/org/apache/jdbm/SerializationTest.java b/src/test/java/org/apache/jdbm/SerializationTest.java
index c61f743..57a58e7 100644
--- a/src/test/java/org/apache/jdbm/SerializationTest.java
+++ b/src/test/java/org/apache/jdbm/SerializationTest.java
@@ -399,6 +399,18 @@ public class SerializationTest extends TestCase {
assertEquals(d, ser.deserialize(ser.serialize(d)));
}

  • public void testUUID() throws IOException, ClassNotFoundException {
  •   //try a bunch of UUIDs.
    
  •   for(int i = 0; i < 1000;i++)
    
  •   {
    
  •       UUID uuid = UUID.randomUUID();
    
  •       SimpleEntry a = new SimpleEntry(uuid, "11");
    
  •       byte[] buf = ser.serialize(a);
    
  •       SimpleEntry b = (SimpleEntry) ser.deserialize(buf);
    
  •       assertEquals(b, a);
    
  •   }
    
  • }

public void testLocale() throws Exception{
assertEquals(Locale.FRANCE, ser.deserialize(ser.serialize(Locale.FRANCE)));

David A. Solin and others added 6 commits June 26, 2012 17:27
Conflicts:
	src/main/java/org/apache/jdbm/DBAbstract.java
Added Optimized Serialization for UUID
Conflicts:
	src/main/java/org/apache/jdbm/Serialization.java
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants