Si vous avez de meilleurs résultats de test, dites-le-moi, mon email : [email protected] , cet article doit être utilisé comme point de départ.
Il n'est pas nécessaire d'indiquer la source pour la réimpression, il suffit de la republier comme vous le souhaitez.
Notions de base d'Oracle Berkeley DB : http://www.oracle.com/technology/products/berkeley-db/index.html
Blog officiel de Berkeley DB en Chine : Blog de l'équipe R&D d'Oracle Berkeley DB Chine»
Le site officiel de la version C# du programme de test de performances BDB indique qu'il peut atteindre 45 748 éléments/s sur XP sp3, mais il n'est pas écrit en C# et est probablement plus rapide. Voici les résultats de mon test :
Intel monocœur 2,8G, 2G sur cette machine, environ 15337 lignes/S,
Serveur Xeon quad-core, environ 47 746 entrées/S,
Il est presque impossible de trouver des programmes de test de performances C# sur Internet, et il existe très peu d'exemples. Il est recommandé de consulter l'adresse officielle du blog chinois de Berkeley DB : Oracle Berkeley DB China R&D Team's Blog » Étude
Ce qui suit est le programme principal de test de la version BDB C# écrit par mon frère. Vous pouvez vous y référer.
code
utiliser le système ;
en utilisant System.Collections.Generic ;
en utilisant System.Text ;
en utilisant BerkeleyDB ;
classe publique BRBDBDefault : IDisposable
{
BTreeDatabaseConfigbtreeDBConfig;
BTreeDatabase btreeDB ;
public BRBDBDefault() : this("bdb.db") { }
public BRBDBDefault (chaîne nombdb)
{
btreeDBConfig = new BTreeDatabaseConfig();
btreeDBConfig.Duplicates = DuplicatesPolicy.SORTED;
btreeDBConfig.Creation = CreatePolicy.IF_NEEDED; //Créer la base de données si elle n'existe pas
btreeDBConfig.PageSize = 4 * 1024; //Taille de la page
btreeDBConfig.CacheSize = new CacheInfo(0, 1024 * 1024 * 80, 0);//Taille du cache
btreeDB = BTreeDatabase.Open(dbName, btreeDBConfig);
}
public void SetData (int id, chaîne de données)
{
DatabaseEntry k = new DatabaseEntry();
DatabaseEntry d = new DatabaseEntry();
k.Data = BitConverter.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(data);
essayer
{
btreeDB.Put(k, d);
}
catch (System.AccessViolationException av)
{
}
attraper { }
}
public void SetData (identifiant de chaîne, données de chaîne)
{
DatabaseEntry k = new DatabaseEntry();
DatabaseEntry d = new DatabaseEntry();
k.Data = ASCIIEncoding.ASCII.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(data);
essayer
{
btreeDB.Put(k, d);
}
catch (System.AccessViolationException av)
{
}
attraper { }
}
chaîne publique GetData (int id)
{
DatabaseEntry de = new DatabaseEntry();
de.Data = BitConverter.GetBytes(id);
KeyValuePair<DatabaseEntry, DatabaseEntry> paire = btreeDB.Get(de);
si (paire.Valeur != null)
return ASCIIEncoding.ASCII.GetString(pair.Value.Data);
return string.Empty;
}
chaîne publique GetData (identifiant de chaîne)
{
DatabaseEntry de = new DatabaseEntry();
de.Data = ASCIIEncoding.ASCII.GetBytes(id);
KeyValuePair<DatabaseEntry, DatabaseEntry> paire = btreeDB.Get(de);
si (paire.Valeur != null)
return ASCIIEncoding.ASCII.GetString(pair.Value.Data);
return string.Empty;
}
chaîne publique GetDBPath()
{
retourner btreeDB.FileName + btreeDB.DatabaseName ;
}
#region Membres IDisposables
public void Fermer()
{
btreeDB.Close();
}
public void Disposer()
{
if (btreeDB != null) btreeDB.Dispose();
}
#endregion
}
Concernant la mise en place de l'environnement de test, veuillez lire par vous-même le blog officiel, qui est très détaillé. Le code de test frontal n'est plus collant, juste un temps de statistiques de cycle,
Il est recommandé à tout le monde d'utiliser CodeTimer de Lao Zhao