zoukankan      html  css  js  c++  java
  • c#总结最近的几项重要代码

    java的代码就不说了,毕竟不是我的主业。

    1.c#数据库连接池Hikari.

       (1)动态加载各类数据库驱动

      (2)支持简单配置文件

    (3)支持按照名称多数据库调用

    (4)使用简洁

     单数据库使用:

    HikariConfig hikariConfig = new HikariConfig();
    hikariConfig.LoadConfig("Hikari.txt");
    HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);

    获取连接:

    hikariDataSource.GetConnection();

    连接池管理类获取

    ManagerPool.Instance.GetDbConnection(MySql);

    项目地址:

    https://github.com/jinyuttt/Hikari.git

    2.c#数据库封装DBQuerySharp

    (1)各类数据库均有,功能齐备

    (2)有SQL,NoSQL样例,完善了封装

    (3)封装成了服务化模型。扩展使用和优化

    (4)有查询的缓存优化样例。

    整个包括了SQL数据库(连接池任意配置),本地KV数据库(berkeleydb),本地SQL数据库(Sqlite),内存SQL数据库(Sqlite),内存NOSQL数据库(redis),内存KV存储(LRU缓存)

    (5)相关项目

    1.sqilte 2.berkeleydb 3.一般数据库使用(通过Hikari) 4.redis   包含其他项目: 1.序列化 2.通信 3.自定义数据库连接池

    项目地址:

    https://github.com/jinyuttt/DBQuerySharp.git

    3.本地缓存JYCache

      (1)完全本地换K-V缓存

    (2)实现FIFO,LRU,LFU策略

    使用示例:

    CacheConfig config = new CacheConfig();
    config.CacheTime = 1800;//(时间都是秒)
    config.Policy = CachePolicy.FIFO;//设置消失策略
    ICache<int,int> cache=CacheFactory<int, int>.Create(config);
    cache.CacheRemoveListener += Cache_CacheRemoveListener;
    cache.Add(1, 1,10);//单独设置key保持10秒

    项目地址:

    https://github.com/jinyuttt/JYCache.git

    4.Hash一直负载均衡LoadBalanceHash

      (1)实现Hash一致算法。算法原理网上搜索很多,我就不说了。只需要搜索“Hash一致”

    (2)这方面我不擅长,主要是参阅网友的东西。我的封装包括了2个项目。一个是网上原理KetamaHash .

      (3)主要参阅:https://www.cnblogs.com/daizhj/archive/2010/08/24/1807324.html

                            https://blog.csdn.net/cywosp/article/details/23397179/

     (4)代码说明

     参考网上的代码就不说了,一模一样。主要是MD5+SortedList.

    这里说我测试的另外一个组合。MurmurHash+SortedList.这个是充分验证了效率的。

    MurmurHash算法比较快,网上多少MD5.用法基本可以一样,但是我没有使用原来进行分组了。底层存储我测试了SortedDictionary,SortedList以及自定义红黑树(gi网友的,可以使用)。他们的主要问题都是在获取Key右侧最近的节点。都没有提供现成的。所以测试很慢。

    最后测试MurmurHash+SortedList.但是多了一层封装。我将其SortedList与红黑树合并(也可以直接自己封装一个类结构,项目中也有样例)。在初始化时,数据添加到红黑树中。然后通过UpdateSort快速遍历,将数据导入SortedList存储使用,这样就启用了其中为Hash一致封装的功能TialNode.但是这里不能使用网上的方法,用linq查询,太慢。我在内部直接使用二分法进行搜索。后面说原因。采用这种办法会很快,而且直接返回最右侧的一个值。这里强调一个问题,不能使用多线程分片查询,更加慢。经过测试,每个线程都是一样的时间,和应该线程直接查询一样的时间使用。都是很短的时间大约一个线程30-800(比毫秒还小的那个单位)。我测试使用的分片方法任然在,但是不能使用。这个可能和数据量有关,一个线程的数据量没有千万级就不要测试了,二分法的方法已经够快了,一次干掉一般的数据,没有几次就结束了。

    最后说说碰上的一个小问题:比较SortedDictionary, SortedList。我推荐一篇文章,是我自己查阅源码(net core)之后,认为这篇文章是真实的。博文地址:https://blog.csdn.net/ma_jiang/article/details/78600043。我比较认可。也正是由于2者的结构,所以我最后采用SortedList来实现Hash一致。

      关于这个问题说2点:SortedList内存小,而且是线性数组实现的Key与value。SortedDictionary则是二叉树。查询一个是二分法,一个是二叉树。另外一个困惑是,我采用红黑树搜索居然达不到它们2者的速度,我感觉奇怪。后面我再继续测试吧。

    项目地址:

    https://github.com/jinyuttt/LoadBalanceHash.git
  • 相关阅读:
    tornado与asyncmongo
    Grails/Groovy学习资源
    关于markdown
    Grails一些重要的配置文件
    Grails的目录结构
    Grails中的UrlMapping
    MVC已死,该是用MOVE的时候了
    算法——回溯法
    算法——分支限界法
    C#如何操控FTP
  • 原文地址:https://www.cnblogs.com/jinyu20180311/p/10386297.html
Copyright © 2011-2022 走看看