Explorar el Código

de-duplicate version strings in the cache

Turns out that version numbers aren't as random as you might guess.
In my cache for example, I have:
  Total package names: 69513 (1390 k)
  Total package structures: 188259 (9036 k)
  Total distinct versions: 186345 (13.4 M)
  Total dependencies: 2052242 (57.5 M)
which amounts to 1035873 (10,1 M) strings.
Reusing version strings reduces this to 161465 (3.479 k).

This comes at a cost of course: Generation is slightly slower, but we
are still faster than what we started with and it makes room (also cache
size wise) for further changes.
David Kalnischkies hace 12 años
padre
commit
b13ce62c7e
Se han modificado 1 ficheros con 3 adiciones y 3 borrados
  1. 3 3
      apt-pkg/pkgcachegen.cc

+ 3 - 3
apt-pkg/pkgcachegen.cc

@@ -609,7 +609,7 @@ bool pkgCacheGenerator::NewGroup(pkgCache::GrpIterator &Grp, const string &Name)
       return false;
       return false;
 
 
    Grp = pkgCache::GrpIterator(Cache, Cache.GrpP + Group);
    Grp = pkgCache::GrpIterator(Cache, Cache.GrpP + Group);
-   map_pointer_t const idxName = WriteStringInMap(Name);
+   map_stringitem_t const idxName = StoreString(PKGNAME, Name);
    if (unlikely(idxName == 0))
    if (unlikely(idxName == 0))
       return false;
       return false;
    Grp->Name = idxName;
    Grp->Name = idxName;
@@ -836,7 +836,7 @@ map_pointer_t pkgCacheGenerator::NewVersion(pkgCache::VerIterator &Ver,
       }
       }
    }
    }
    // haven't found the version string, so create
    // haven't found the version string, so create
-   map_stringitem_t const idxVerStr = WriteStringInMap(VerStr);
+   map_stringitem_t const idxVerStr = StoreString(VERSION, VerStr);
    if (unlikely(idxVerStr == 0))
    if (unlikely(idxVerStr == 0))
       return 0;
       return 0;
    Ver->VerStr = idxVerStr;
    Ver->VerStr = idxVerStr;
@@ -933,7 +933,7 @@ bool pkgCacheGenerator::NewDepends(pkgCache::PkgIterator &Pkg,
       if (index == 0)
       if (index == 0)
       {
       {
 	 void const * const oldMap = Map.Data();
 	 void const * const oldMap = Map.Data();
-	 index = WriteStringInMap(Version);
+	 index = StoreString(VERSION, Version);
 	 if (unlikely(index == 0))
 	 if (unlikely(index == 0))
 	    return false;
 	    return false;
 	 if (OldDepLast != 0 && oldMap != Map.Data())
 	 if (OldDepLast != 0 && oldMap != Map.Data())