Пример #1
0
        private void Run(Action <BenchmarkIteration, ObjectDB <IFlatbufferObject>, IFlatbufferObject> action, int dataIndex, int dataSize)
        {
            var data      = InputData[dataIndex];
            var factories = new List <Func <ByteBuffer, IFlatbufferObject> > {
                (bb) => Data_8b.GetRootAsData_8b(bb),
                (bb) => Data_128b.GetRootAsData_128b(bb),
                (bb) => Data_1KB.GetRootAsData_1KB(bb),
                (bb) => Data_1MB.GetRootAsData_1MB(bb),
            };

            var nRecords = dataSize;
            var buffer   = 100_000;

            using (var db = new ObjectDB <IFlatbufferObject>(FileStorageEngineFactory.Create("benchmark", SIZE_15GB, nRecords + buffer), new FlatBufferSerializer(factories)))
            {
                // set up data
                for (int i = 0; i < nRecords; i++)
                {
                    db.Insert(data);

                    if (i % 10000 == 0 && i > 0)
                    {
                        Console.WriteLine(i);
                    }
                }

                // run benchmark
                foreach (BenchmarkIteration iter in Benchmark.Iterations)
                {
                    action(iter, db, data);
                }
            }
        }
Пример #2
0
 private void Insert(BenchmarkIteration iter, ObjectDB <IFlatbufferObject> db, IFlatbufferObject data)
 {
     using (iter.StartMeasurement())
     {
         for (var i = 0; i < Benchmark.InnerIterationCount; i++)
         {
             db.Insert(data);
         }
     }
 }
Пример #3
0
        //-------------------------------------------------------------------------

        /// <summary>
        /// 将对象插入数据库
        /// </summary>
        /// <param name="obj"></param>
        /// <returns>返回一个结果对象 Result。如果发生错误,则 Result 中包含错误信息;如果没有错误,result.Info即是obj</returns>
        public static Result insert(Object obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException();
            }

            Result result = ObjectDB.Insert((IEntity)obj);

            return(result);
        }
Пример #4
0
        public void InsertReturnsGuid()
        {
            var expectedGuid = Guid.NewGuid();

            var storageEngine = new Mock <StorageEngine>();
            Mock <Serializer <object> > serializer = new Mock <Serializer <object> >();
            ObjectDB <object>           db         = new ObjectDB <object>(storageEngine.Object, serializer.Object, () => expectedGuid);
            var guid = db.Insert(BitConverter.GetBytes(UInt64.MaxValue));

            Assert.Equal(expectedGuid, guid);
        }
Пример #5
0
        private static Result Insert(IEntity obj, EntityInfo entityInfo, Boolean isInsertParent)
        {
            Result result = Validator.Validate(obj, "insert");

            if (result.HasErrors)
            {
                return(result);
            }

            if (isInsertParent && entityInfo.Parent != null)
            {
                IEntity objP = Entity.New(entityInfo.Type.BaseType.FullName);
                List <EntityPropertyInfo> eplist = Entity.GetInfo(objP).SavedPropertyList;
                foreach (EntityPropertyInfo info in eplist)
                {
                    if (info.IsList)
                    {
                        continue;
                    }
                    objP.set(info.Name, obj.get(info.Name));
                }
                ObjectDB.Insert(objP);

                obj.Id = objP.Id;
            }

            List <IInterceptor> ilist = MappingClass.Instance.InterceptorList;

            for (int i = 0; i < ilist.Count; i++)
            {
                ilist[i].BeforInsert(obj);
            }

            IDbCommand cmd = DataFactory.GetCommand(getInsertSql(entityInfo), DbContext.getConnection(entityInfo));

            OrmHelper.SetParameters(cmd, "insert", obj, entityInfo);

            lock (objLock) {
                executeCmd(cmd, entityInfo, ref obj);
            }

            for (int i = 0; i < ilist.Count; i++)
            {
                ilist[i].AfterInsert(obj);
            }
            CacheUtil.CheckCountCache("insert", obj, entityInfo);
            result.Info = obj;

            CacheTime.updateTable(obj.GetType());

            return(result);
        }
Пример #6
0
        static void Main(string[] args)
        {
            Guid guid;

            // create a database
            var pathToDataDir     = "db-data";
            var fileStorageEngine = FileStorageEngineFactory.Create(pathToDataDir, SIZE_1G, MAX_ENTRIES);

            using (var db = new ObjectDB <object>(fileStorageEngine, new BinaryFormatterSerializer()))
            {
                // create
                var data = new MyData(1, "hello world");
                Console.WriteLine("inserting object: " + data);
                guid = db.Insert(data);
                Console.WriteLine("GUID of inserted object={0}", guid);

                // read
                data = db.Read <MyData>(guid);
                Console.WriteLine("read object: {0}", data);

                // update
                data.Text = "very interesting text";
                Console.WriteLine("updating object: {0}", data);
                db.Update(guid, data);
            }

            // re-open existing databse
            using (var db = new ObjectDB <object>(FileStorageEngineFactory.Open(pathToDataDir), new BinaryFormatterSerializer()))
            {
                // read after re-opening the db
                var data = db.Read <MyData>(guid);
                Console.WriteLine("object after re-opening the DB: {0}", data);

                // delete
                Console.WriteLine("deleting object");
                db.Delete(guid);

                // RecordNotFoundException after deletion
                try
                {
                    db.Read <MyData>(guid);
                }
                catch (RecordNotFoundException)
                {
                    Console.WriteLine("object was deleted");
                }
            }
        }
Пример #7
0
        private void Delete(BenchmarkIteration iter, ObjectDB <IFlatbufferObject> db, IFlatbufferObject data)
        {
            List <Guid> ids = new List <Guid>();

            for (var i = 0; i < Benchmark.InnerIterationCount; i++)
            {
                ids.Add(db.Insert(data));
            }

            using (iter.StartMeasurement())
            {
                foreach (var id in ids)
                {
                    db.Delete(id);
                }
            }
        }