public void BulkTest() { using (var bdb = CreateDb()) using (var cursor = new BerkeleyBulkCursor(bdb, GetPageSize(bdb))) { bool blobExists; HashSet<int> keys = BulkWrite(cursor, out blobExists); BulkRead(cursor, keys, blobExists); keys = BulkDelete(cursor, keys, ref blobExists); BulkRead(cursor, keys, blobExists); } }
static void Main(string[] args) { var serviceRootUri = new Uri("http://*****:*****@"D:\гуманитарий с дипломом менеджера.jpg"); //ReadFoto(bdb); } } }
private static void BulkRead(BerkeleyBulkCursor cursor, HashSet<int> keys, bool blobExists) { var checkKeys = new HashSet<int>(keys); bool blobFound = false; DateTime d1 = new DateTime(2014, 1, 1); for (BerkeleyBulkEnumerator buffer = cursor.ReadAsync(Encoding.UTF8.GetBytes("1"), BerkeleyDbOperation.DB_SET).Result; !buffer.NotFound; buffer = cursor.ReadAsync(null, BerkeleyDbOperation.DB_NEXT).Result) { buffer.Error.ThrowIfError(); foreach (BerkeleyKeyValueBulk data in buffer) { String key = Encoding.UTF8.GetString(data.Key.ToArray()); int i; if (int.TryParse(key, out i)) { Assert.IsTrue(checkKeys.Remove(i), "key: " + i + " not exists"); String value = Encoding.UTF8.GetString(data.Value.ToArray()); Assert.AreEqual(DateTime.ParseExact(value, "dddd dd MMMM yyyy", null), d1.AddDays(i - 1), "bad value: " + value); } else blobFound = key == "blob value" && data.Value.Count == 34123 && CheckByteArray(data.Value); } } Assert.AreEqual(checkKeys.Count, 0, "not all keys found"); Assert.IsTrue(blobFound == blobExists, "blob error"); }
private static HashSet<int> BulkWrite(BerkeleyBulkCursor cursor, out bool blobExists) { var keys = new HashSet<int>(); DateTime d1 = new DateTime(2014, 1, 1); for (int i = 0; i < 3000; i++) { if (i == 500) { Byte[] key2 = Encoding.UTF8.GetBytes("blob value"); Byte[] value2 = GenerateByteArray(34123); cursor.AddWrite(key2, value2); } Byte[] key = Encoding.UTF8.GetBytes((i + 1).ToString()); String v = d1.AddDays(i).ToString("dddd dd MMMM yyyy"); Byte[] value = Encoding.UTF8.GetBytes(v); cursor.AddWrite(key, value); keys.Add(i + 1); } var error = cursor.WriteAsync(BerkeleyDbWriteMode.DB_OVERWRITE_DUP).Result; error.ThrowIfError(); blobExists = true; return keys; }
private static HashSet<int> BulkDelete(BerkeleyBulkCursor cursor, HashSet<int> keys, ref bool blobExists) { foreach (int i in keys.Where(i => (i % 3) == 0)) cursor.AddDelete(Encoding.UTF8.GetBytes(i.ToString())); if (blobExists) cursor.AddDelete(Encoding.UTF8.GetBytes("blob value")); BerkeleyError error = cursor.DeleteAsync().Result; error.ThrowIfError(); blobExists = false; return new HashSet<int>(keys.Where(i => (i % 3) != 0)); }