zoukankan      html  css  js  c++  java
  • 嵌入式Nosql数据库——LiteDB

    LiteDB 是一个开源的 .NET 开发的小型快速轻量级的 NoSQL 嵌入式数据库,特性:

    无服务器的 NoSQL 文档存储,数据存储在单一文件中
    类似 MongoDb 的简单 API
    100% C# 代码,支持 .NET 3.5,单一 DLL,可从 NuGet 安装: Install-Package LiteDB
    支持 ACID 事务控制
    日志模式下的写失败恢复
    可存储 POCO 类或者 BsonDocument
    支持文件存储和数据流存储 (like GridFS in MongoDB)
    单一数据文件存储,类似 SQLite
    文档字段索引,用于快速搜索
    支持使用 LINQ 查询
    Shell 命令行 (get on  - try this online version

    自生成id测试
      /// <summary>
            /// 自生成id测试
            /// </summary>
            public void AutoId_Test()
            {
                //打开或者创建新的数据库
                using (var db = new LiteDatabase("sample.db"))
                {
                    var cs_int = db.GetCollection<EntityInt>("int");
                    // int类型自生成Id
                    var cint_1 = new EntityInt { Name = "Using Int 1" };
                    var cint_2 = new EntityInt { Name = "Using Int 2" };
                    var cint_5 = new EntityInt { Id = 5, Name = "Using Int 5" }; // set Id, do not generate (jump 3 and 4)!
                    var cint_6 = new EntityInt { Id = 0, Name = "Using Int 6" }; // for int, 0 is empty
                    var cint_7 = new EntityInt { Name = "Using Int 7" };
                    cs_int.Insert(cint_1);
                    cs_int.Insert(cint_2);
                    cs_int.Insert(cint_5);
                    cs_int.Insert(cint_6);
                    cs_int.Insert(cint_7);
                    Console.WriteLine(cint_1.Id);
                    Console.WriteLine(cint_2.Id);
                    Console.WriteLine(cint_5.Id);
                    Console.WriteLine(cint_6.Id);
                    Console.WriteLine(cint_7.Id);
    
                    //guid
                    var guid = Guid.NewGuid();
                    var cguid_1 = new EntityGuid { Id = guid, Name = "Using Guid" };
                    var cguid_2 = new EntityGuid { Name = "Using Guid 1" };
                    var cguid_3 = new EntityGuid { Name = "Using Guid 2" };
                    Console.WriteLine("Guid.NewGuid()="+guid);
                    Console.WriteLine(cguid_1.Id);
                    Console.WriteLine(cguid_2.Id);
                    Console.WriteLine(cguid_3.Id);
                    // oid
                    var oid = ObjectId.NewObjectId();
                    var coid_1 = new EntityOid { Name = "ObjectId-1" };
                    var coid_2 = new EntityOid { Id = oid, Name = "ObjectId-2" };
                    Console.WriteLine("ObjectId.NewObjectId()=" + oid);
                    Console.WriteLine(coid_1.Id);
                    Console.WriteLine(coid_2.Id);
                    // string 没有自动生成的id
                    var cstr_1 = new EntityString { Name = "Object using String" };
                    Console.WriteLine(cstr_1.Id);
    
                }
            }
       /// <summary>
        /// int类型ID
        /// </summary>
        public class EntityInt
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }
        /// <summary>
        /// Guyid类型ID
        /// </summary>
        public class EntityGuid
        {
            public Guid Id { get; set; }
            public string Name { get; set; }
        }
        /// <summary>
        /// LiteDB.ObjectId
        /// </summary>
        public class EntityOid
        {
            public ObjectId Id { get; set; }
            public string Name { get; set; }
        }
        /// <summary>
        /// 字符串类型
        /// </summary>
        public class EntityString
        {
            public string Id { get; set; }
            public string Name { get; set; }
        }

    如上图所示:

    int类型id自动增长,当你设置了大于0的id时(5),将跳过3、4,后面的从5开始增长。

    guid类型的id需要我们自己生成。

    oid类型id也是需要自己生成。

    string 类型无法自动生成id。

    对于其它功能:

    大文件、并发、json、linq、filestorage等功能,大家可参考源代码里面的单元测试,如下:

  • 相关阅读:
    Java基础面试操作题: 线程问题,写一个死锁(原理:只有互相都等待对方放弃资源才会产生死锁)
    Java基础面试操作题: File IO 文件过滤器FileFilter 练习 把一个文件夹下的.java文件复制到另一个文件夹下的.txt文件
    Java基础面试操作题:Java代理工厂设计模式 ProxyFactory 有一个Baby类,有Cry行为,Baby可以配一个保姆 但是作为保姆必须遵守保姆协议:能够处理Baby类Cry的行为,如喂奶、哄睡觉。
    Java中 Character方法练习:字符串中英文字母个数 5435abc54abc3AHJ5 正则:matches("[a-zA-Z0-9]{1}")
    Java 练习:字符串反转
    集合类别
    JAVA 后台
    micro focus cobol vs mainframe cobol
    Java 编码
    关于java中char占几个字节,汉字占几个字节
  • 原文地址:https://www.cnblogs.com/zhangzhi19861216/p/4973638.html
Copyright © 2011-2022 走看看