Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Store Chats in MVStore

Context and Problem Statement

This is a follow-up to ADR-031.

The chats with AI should be saved on exit from JabRef and retrieved on launch. We need to decide the format of the serialized messages.

Decision Drivers

  • Easy to implement and maintain
  • Memory-efficient (because JabRef is said to consume much memory)

Considered Options

  • JSON
  • MVStore
  • Custom format

Decision Outcome

Chosen option: “MVStore”, because it is simple and memory-efficient.

Pros and Cons of the Options

JSON

  • Good, because allows for easy storing and loading of chats
  • Good, because cross-platform
  • Good, because widely used and accepted, so there are lots of libraries for JSON format
  • Good, because it is even possible to reuse the chats file for other purposes
  • Good, because has potential for being mergeable by external tooling
  • Bad, because too verbose (meaning the file size could be much smaller)

MVStore

  • Good, because automatic loading and saving to disk
  • Good, because memory-efficient
  • Bad, because does not support mutable values in maps.
  • Bad, because the order of messages need to be “hand-crafted” (e.g., by mapping from an Integer to the concrete message), since MVStore does not support storing list which update.
  • Bad, because it stores data as key-values, but not as a custom data type (like tables in RDBMS)

Custom format

  • Good, because we have the full control
  • Bad, because involves writing our own language and parser
  • Bad, because we need to implement optimizations found in databases on our own (storing some data in RAM, other on disk)