Created
January 28, 2012 16:45
-
-
Save hermanocabral/1694980 to your computer and use it in GitHub Desktop.
RavenDB embedded test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.ComponentModel.Composition.Hosting; | |
using System.Diagnostics; | |
using System.IO; | |
using System.Security.Cryptography; | |
using System.Text; | |
using Raven.Client; | |
using Raven.Client.Embedded; | |
using Raven.Database.Plugins; | |
using Raven.Database.Server; | |
using Raven.Json.Linq; | |
namespace TestBench | |
{ | |
internal class Program | |
{ | |
private static readonly string _DatabaseDirectory = Path.Combine(Environment.CurrentDirectory, "Database"); | |
private class TestDummy | |
{ | |
public Guid Id { get; set; } | |
public Guid Data1 { get; set; } | |
public Guid Data2 { get; set; } | |
public string Data3 { get; set; } | |
public string Data4 { get; set; } | |
public string Data5 { get; set; } | |
public string Data6 { get; set; } | |
public Guid Data7 { get; set; } | |
public Guid Data8 { get; set; } | |
public DateTime Data9 { get; set; } | |
public Guid Data10 { get; set; } | |
public Guid Data11 { get; set; } | |
public string Data12 { get; set; } | |
public int Data13 { get; set; } | |
public int Data14 { get; set; } | |
public string Data15 { get; set; } | |
public string Data16 { get; set; } | |
public Guid Data17 { get; set; } | |
public string Data18 { get; set; } | |
public Guid Data19 { get; set; } | |
public Guid Data20 { get; set; } | |
public Guid Data21 { get; set; } | |
public string Data22 { get; set; } | |
public string Data23 { get; set; } | |
public DateTime Data24 { get; set; } | |
public float Data25 { get; set; } | |
public float Data26 { get; set; } | |
public float Data27 { get; set; } | |
public float Data28 { get; set; } | |
public float Data29 { get; set; } | |
public float Data30 { get; set; } | |
public double Data31 { get; set; } | |
public double Data32 { get; set; } | |
public double Data33 { get; set; } | |
public TestDummy() | |
{ | |
var random = new Random(DateTime.Now.Millisecond); | |
Data1 = Guid.NewGuid(); | |
Data2 = Guid.NewGuid(); | |
Data3 = Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString(); | |
Data4 = Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString(); | |
Data5 = Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString(); | |
Data6 = Guid.NewGuid().ToString(); | |
Data7 = Guid.NewGuid(); | |
Data8 = Guid.NewGuid(); | |
Data9 = DateTime.Now.AddDays(random.Next(100)); | |
Data10 = Guid.NewGuid(); | |
Data11 = Guid.NewGuid(); | |
Data12 = Guid.NewGuid().ToString(); | |
Data13 = random.Next(12345); | |
Data14 = random.Next(12345); | |
Data15 = Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString(); | |
Data16 = Guid.NewGuid().ToString(); | |
Data17 = Guid.NewGuid(); | |
Data18 = Guid.NewGuid().ToString() + Guid.NewGuid().ToString(); | |
Data19 = Guid.NewGuid(); | |
Data20 = Guid.NewGuid(); | |
Data21 = Guid.NewGuid(); | |
Data22 = Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString(); | |
Data23 = Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString(); | |
Data24 = DateTime.Now.AddHours(random.Next(100)); | |
Data25 = (float) random.NextDouble()*random.Next(12345); | |
Data26 = (float) random.NextDouble()*random.Next(12345); | |
Data27 = (float) random.NextDouble()*random.Next(12345); | |
Data28 = (float) random.NextDouble()*random.Next(12345); | |
Data29 = (float) random.NextDouble()*random.Next(12345); | |
Data30 = (float) random.NextDouble()*random.Next(12345); | |
Data31 = random.NextDouble()*random.Next(12345); | |
Data32 = random.NextDouble()*random.Next(12345); | |
Data33 = random.NextDouble()*random.Next(12345); | |
} | |
} | |
private static void Main() | |
{ | |
//always start fresh | |
if (Directory.Exists(_DatabaseDirectory)) | |
Directory.Delete(_DatabaseDirectory, true); | |
var crono = new Stopwatch(); | |
//Console.Write("Creating test data... "); | |
//crono.Start(); | |
var testData = new List<TestDummy>(1000); | |
for (var i = 0; i < testData.Capacity; i++) | |
testData.Add(new TestDummy()); | |
//crono.Stop(); | |
//Console.WriteLine("Done! Test data created in {0} seconds", crono.Elapsed.TotalSeconds); | |
//crono.Reset(); | |
using (var db = GetRavenDB()) | |
{ | |
using (var session = db.OpenSession()) | |
{ | |
Console.Write("Inserting test data... "); | |
crono.Start(); | |
testData.ForEach(session.Store); | |
session.SaveChanges(); | |
crono.Stop(); | |
Console.WriteLine("Done! {0} entries inserted in {1} seconds", testData.Count, crono.Elapsed.TotalSeconds); | |
} | |
Console.Read(); | |
} | |
//crono.Reset(); | |
////let's try now running in memory... | |
//using (var db = GetDatabase(false)) | |
//{ | |
// using (var session = db.OpenSession()) | |
// { | |
// Console.Write("Inserting test data into the database (RunInMemory = true)..."); | |
// crono.Start(); | |
// testData.ForEach(session.Store); | |
// session.SaveChanges(); | |
// crono.Stop(); | |
// Console.WriteLine("Done! Entries inserted in {0} minutes", crono.Elapsed.TotalMinutes); | |
// } | |
//} | |
Console.Read(); | |
} | |
public static IDocumentStore GetRavenDB(bool useDisk = true) | |
{ | |
var db = new EmbeddableDocumentStore | |
{ | |
DataDirectory = _DatabaseDirectory, | |
UseEmbeddedHttpServer = true, | |
RunInMemory = !useDisk, | |
Configuration = | |
{ | |
Port = 8888, | |
//HostName = "localhost", | |
AnonymousUserAccessMode = AnonymousUserAccessMode.All, | |
Catalog = new AggregateCatalog | |
{ | |
Catalogs = | |
{ | |
new AssemblyCatalog(typeof (DocumentCodec).Assembly) | |
} | |
} | |
}, | |
}; | |
NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(8888); | |
db.Initialize(); | |
return db; | |
} | |
} | |
internal class DocumentCodec : AbstractDocumentCodec | |
{ | |
private const string YOUR_PASSWORD = "1234567890"; | |
public override Stream Encode(string key, RavenJObject data, RavenJObject metadata, Stream dataStream) | |
{ | |
return new CryptoStream(dataStream, GetCryptoProvider(key).CreateEncryptor(), CryptoStreamMode.Write); | |
} | |
public override Stream Decode(string key, RavenJObject metadata, Stream dataStream) | |
{ | |
return new CryptoStream(dataStream, GetCryptoProvider(key).CreateDecryptor(), CryptoStreamMode.Read); | |
} | |
private static SymmetricAlgorithm GetCryptoProvider(string key) | |
{ | |
var passwordBytes = new Rfc2898DeriveBytes(YOUR_PASSWORD, GetSaltFromDocumentKey(key)); | |
var csp = new AesCryptoServiceProvider(); | |
csp.Key = passwordBytes.GetBytes(csp.KeySize/8); | |
csp.IV = passwordBytes.GetBytes(csp.BlockSize/8); | |
return csp; | |
} | |
private static byte [] GetSaltFromDocumentKey(string key) | |
{ | |
return MD5.Create().ComputeHash(Encoding.ASCII.GetBytes(key)); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment