おひろめ会:Javaにおけるデータシリアライズ手法

8,452 views

Published on

Published in: Technology

おひろめ会:Javaにおけるデータシリアライズ手法

  1. 1. Java
  2. 2. Java API public class Hoge implements Serializable{
  3. 3. XML wikipedia to
  4. 4. Hello World! Java →116 ac ed 00 05 73 72 00 26 62 65 6e 63 68 6d 61 72 6b 2e 74 65 73 74 63 61 73 65 2e 62 65 61 6e 2e 48 65 6c 6c 6f 57 6f 72 6c 64 42 65 61 6e 52 9a 88 0d cc 48 49 00 02 00 02 4a 00 04 74 69 6d 65 4c 00 03 73 74 72 74 00 12 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b 78 70 00 00 01 27 8a dc 2a e2 74 00 0c 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 JSON →43 {"str":"Hello World!","time":1269345080819}
  5. 5. Java RMI EJB RPC(Remote Procedure Call)
  6. 6. Java ※ Java
  7. 7. ✓ ✓ ✓ ✓
  8. 8. {"str":"Hello World!","time":1269345080819} JavaScript
  9. 9. Java JSON • Json-lib( ) http://json-lib.sourceforge.net/ • JSONIC http://jsonic.sourceforge.jp/ • FlexJson http://flexjson.sourceforge.net/ •
  10. 10. Java API (writeExternal/readExternal) public class Hoge implements Externalizable{ private String str; private long time; @Override public void writeExternal(ObjectOutput out) { out.writeObject(this.str); out.writeLong(this.time); } @Override public void readExternal(ObjectInput in) { this.str = (String)in.readObject(); this.long = in.readLong(); } }
  11. 11. public class Hoge implements Externalizable{
  12. 12. ac ed 00 05 73 72 00 0d ac ed 00 05 73 72 00 1b 74 65 73 74 2e 54 65 73 74 65 73 74 2e 45 78 74 74 42 65 61 6e 20 e9 e2 65 72 6e 61 6c 69 7a 61 62 c4 df 79 42 02 00 03 62 6c 65 54 65 73 74 42 4a 00 02 69 64 4c 00 04 65 61 6e a3 be c9 30 53 74 69 6d 65 74 00 10 4c 4a 7a f8 0c 00 00 78 70 6a 61 76 61 2f 75 74 69 77 08 00 00 00 00 00 00 6c 2f 44 61 74 65 3b 4c 00 01 74 00 04 74 65 73 00 05 76 61 6c 75 65 74 74 73 72 00 0e 6a 61 76 00 12 4c 6a 61 76 61 2f 61 2e 75 74 69 6c 2e 44 6c 61 6e 67 2f 53 74 72 61 74 65 68 6a 81 01 4b 69 6e 67 3b 78 70 00 00 59 74 19 03 00 00 78 70 00 00 00 00 00 01 73 72 77 08 00 00 01 27 74 e6 00 0e 6a 61 76 61 2e 75 d3 af 78 78 74 69 6c 2e 44 61 74 65 68 6a 81 01 4b 59 74 19 03 00 00 78 70 77 08 00 00 01 27 74 e6 d2 3c 78 74 00 04 74 65 73 74
  13. 13. Google BigTable RPC 2008 7 Apache Lisence Ver. 2.0)
  14. 14. IDL DSL IDL (C++ Python Java package serializable.protobuf; message TestBean{ required int32 id = 1; required string value = 2; required int64 time = 3; }
  15. 15. ac ed 00 05 73 72 00 0d 08 01 12 04 74 65 73 74 74 65 73 74 2e 54 65 73 18 f6 e2 b3 e1 06 74 42 65 61 6e 20 e9 e2 62 c4 df 79 42 02 00 03 4a 00 02 69 64 4c 00 04 74 69 6d 65 74 00 10 4c 6a 61 76 61 2f 75 74 69 6c 2f 44 61 74 65 3b 4c 00 05 76 61 6c 75 65 74 00 12 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b 78 70 00 00 00 00 00 00 00 01 73 72 00 0e 6a 61 76 61 2e 75 74 69 6c 2e 44 61 74 65 68 6a 81 01 4b 59 74 19 03 00 00 78 70 77 08 00 00 01 27 74 e6 d2 3c 78 74 00 04 74 65 73 74
  16. 16. Hadoop 2009 4 RPC C C++ Java Python Ruby Hadoop Core Hive Pig RPC
  17. 17. JSON Java {"type": "array", "items": "string"}
  18. 18. 4f 62 6a 01 02 16 61 76 72 6f 2e 73 63 68 65 6d 61 ca 02 7b 22 74 79 70 65 22 3a 22 72 65 63 6f 72 64 22 2c 22 6e 61 6d 65 22 3a 22 50 72 69 6d 69 74 69 76 65 54 65 73 74 42 65 61 6e 22 2c 22 6e 61 6d 65 73 70 61 63 65 22 3a 22 74 65 73 74 22 2c 22 66 69 65 6c 64 73 22 3a 5b 7b 22 6e 61 6d 65 22 3a 22 69 64 22 2c 22 74 79 70 65 22 3a 22 6c 6f 6e 67 22 7d 2c 7b 22 6e 61 6d 65 22 3a 22 76 61 6c 75 65 22 2c 22 74 79 70 65 22 3a 22 73 74 72 69 6e 67 22 7d 2c 7b 22 6e 61 6d 65 22 3a 22 74 69 6d 65 22 2c 22 74 79 70 65 22 3a 22 6c 6f 6e 67 22 7d 5d 7d 00 0c 64 69 4e 57 ee 5f 83 7d a0 a8 7f b7 bb 60 33 02 18 02 08 74 65 73 74 f4 cf b6 ce ee 49 0c 64 69 4e 57 ee 5f 83 7d a0 a8 7f b7 bb 60 33
  19. 19. (Ruby Python Perl C C++ Java
  20. 20. Protocol Buffers zero-copy serialize C++ Ruby
  21. 21. • JSON - {} [] - ๏ 0xcc →unsigned 8-bit integer • - • - • URL - http://d.hatena.ne.jp/viver/20100324/p1
  22. 22. JSON ac ed 00 05 73 72 00 0d 83 a2 69 64 a1 31 a4 74 74 65 73 74 2e 54 65 73 69 6d 65 ad 31 32 36 39 74 42 65 61 6e 20 e9 e2 34 31 32 30 39 34 36 36 62 c4 df 79 42 02 00 03 31 a5 76 61 6c 75 65 ac 4a 00 02 69 64 4c 00 04 48 65 6c 6c 6f 20 57 6f 74 69 6d 65 74 00 10 4c 72 6c 64 21 6a 61 76 61 2f 75 74 69 6c 2f 44 61 74 65 3b 4c 00 05 76 61 6c 75 65 74 00 12 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b 78 70 00 00 00 00 00 00 00 01 73 72 00 0e 6a 61 76 61 2e 75 74 69 6c 2e 44 61 74 65 68 6a 81 01 4b 59 74 19 03 00 00 78 70 77 08 00 00 01 27 74 e6 d2 3c 78 74 00 04 74 65 73 74
  23. 23. ✓ ✓ ✓ ✓
  24. 24. - 1MB - List 1KB × 256 - Map key:256byte / value:int ×256 - Java
  25. 25. - - - 10000
  26. 26. - Serializable - Externalizable - JSONIC - FlexJson - Protocol Bufferes - Hadoop Avro - Message Pack
  27. 27. Message Pack - ProtoBuf - Java Serializable Externalizable -
  28. 28. ✓ ✓ ✓ ✓
  29. 29. bzip2
  30. 30. • Deflate - gzip zip • QuickLZ -
  31. 31. gzip zip gzip = gzip Deflate LZ77 + (
  32. 32. Abraham Lempel Jacob Ziv 1977 LZ LZ77 ※
  33. 33. Abraham Lempel Jacob Ziv 1977
  34. 34. Abraham Lempel Jacob Ziv 1977
  35. 35. Abraham Lempel Jacob Ziv 1977
  36. 36. Abraham Lempel Jacob Ziv 1977
  37. 37. Abraham Lempel Jacob Ziv 1977
  38. 38. Abraham Lempel Jacob Ziv 1977
  39. 39. Abraham Lempel Jacob Ziv 1977
  40. 40. Abraham Lempel Jacob Ziv 1977
  41. 41. Abraham Lempel Jacob Ziv 1977
  42. 42. • DAEBCBACBBBC •
  43. 43. • DAEBCBACBBBC •
  44. 44. • DAEBCBACBBBC •
  45. 45. • DAEBCBACBBBC •
  46. 46. • DAEBCBACBBBC •
  47. 47. • DAEBCBACBBBC •
  48. 48. • DAEBCBACBBBC •
  49. 49. • DAEBCBACBBBC •
  50. 50. • DAEBCBACBBBC •
  51. 51. • DAEBCBACBBBC •
  52. 52. • DAEBCBACBBBC • → →
  53. 53. - Message Pack - Message Pack + Deflate - Message Pack + QuickLZ twitter (JSON) - - (
  54. 54. JSON Message Pack - 3/4 Deflate
  55. 55. ✓ ✓ ✓ ✓
  56. 56. Java Message Pack Java API Serializable Externalizable Deflate

×