Class DatabaseFileReader

  • All Implemented Interfaces:
    java.util.Iterator<MemoryDatabase>

    public class DatabaseFileReader
    extends java.lang.Object
    implements java.util.Iterator<MemoryDatabase>
    The DatabaseFileReader provides a way to read a series of database files in a memory-efficient way, by converting them to a series of MemoryDatabases, none of which are too large.
    • Method Detail

      • hasNext

        public boolean hasNext()
        Specified by:
        hasNext in interface java.util.Iterator<MemoryDatabase>
      • next

        public MemoryDatabase next()
        Loads the winner's database branch into the memory in a MemoryDatabase object, by using the already downloaded list of remote database files.

        Because database files can contain multiple DatabaseVersions per client, a range for which to load the database versions must be determined.

        Example 1:

          db-A-0001   (A1)     Already known             Not loaded
          db-A-0005   (A2)     Already known             Not loaded
                      (A3)     Already known             Not loaded
                      (A4)     Part of winner's branch   Loaded
                      (A5)     Purge database version    Ignored (only DEFAULT)
          db-B-0001   (A5,B1)  Part of winner's branch   Loaded
          db-A-0006   (A6,B1)  Part of winner's branch   Loaded
         

        In example 1, only (A4)-(A5) must be loaded from db-A-0005, and not all four database versions.

        Other example:

          db-A-0005   (A1)     Part of winner's branch   Loaded
          db-A-0005   (A2)     Part of winner's branch   Loaded
          db-B-0001   (A2,B1)  Part of winner's branch   Loaded
          db-A-0005   (A3,B1)  Part of winner's branch   Loaded
          db-A-0005   (A4,B1)  Part of winner's branch   Loaded
          db-A-0005   (A5,B1)  Purge database version    Ignored (only DEFAULT)
         

        In example 2, (A1)-(A5,B1) [except (A2,B1)] are contained in db-A-0005 (after merging!), so db-A-0005 must be processed twice; each time loading separate parts of the file. In this case: First load (A1)-(A2) from db-A-0005, then load (A2,B1) from db-B-0001, then load (A3,B1)-(A4,B1) from db-A-0005, and ignore (A5,B1).

        Specified by:
        next in interface java.util.Iterator<MemoryDatabase>
        Returns:
        Returns a loaded memory database containing all metadata from the winner's branch
      • remove

        public void remove()
        Specified by:
        remove in interface java.util.Iterator<MemoryDatabase>