c#一些处理解决方案(组件,库)
<p>1.关系数据库</p>
postgresql,mysql,oracle,sqlserver
2. 本地数据库
sqlite,berkeleydb,litedb
3. 缓存数据库
redis,mongdb
4. 数据库连接池
基本按照 ADO.NET 实现,所有数据库都自我实现数据库连接池,一般连接字符串中 pool 设置。
我自己实现了一个数据库连接池 Hikari. 已经提交 nuget,名称:Hikari
5. 一般缓存
在 c# 中基本使用集合。
我自己实现了 JYCache,放在 git 上面,供大家学习研究,没有用于生产。
6.ORM 框架
Dapper,linq2db,EF 不能忘记
7.excel 操作
原.net framework 控件
OleDb: 需要驱动支持
linq to excel: 还是以 OleDb 为基础封装,当前主要是.net framework
EPPlus: 不需要支持
NPOI:不需要支持
pageoffice:
8.PDF
ITextSharp,Spire.PDF
9.MQ
通用件:kafka,RocketMQ
另外 mqtt 实现的服务平台也可以作为小消息传输。
最近逐步有人研究 go, 其实一门语言出来总是有噱头的,我就不说了,总会有人去折腾的。不过按照现在的说法,我感觉 go 适合这类东西,而不是 web 之类。可惜,还没有发现合适的,有一个 nsq,但是没有 c#客户端,我已经向原作者提交 c# 客户端请求。
10. 通信
zmq( 关注很久,但是没有发现官方吹嘘的那么牛逼),不要太复杂的处理
dotnetty(.net core 实现),正在更新,底层优化合适。我自己编译了.net standard 版本,也放在了 nuget。在官方的名称之后添加了.Lib,例如:DotNetty.Transport.Lib。
11. 序列化组件
(1)二进制
MessagePack 这玩意是 2 个,分别是:https://msgpack.org,https://github.com/neuecc/MessagePack-CSharp
准确说一个是 MessagePack-cli, 一个是 MessagePack-CSharp。注意别弄混了。
(2)JSON
Newtonsoft.Json:通用,不过封装东西越来越多,无用太多
ServiceStack.Text:商业化了,它的优势在于解析
fastJSON.NET:
(3)BSON
mongdb 的格式
(4)其它
12. 负载均衡
并没有统一的东西,各种不同,很多成熟的软件客户端自带,例如:redis.
网上还有各种参考的源码。我自己也实现了一个:KetamaHash
就是 hash 一致算法带虚拟节点。底层是MurmurHash+ 红黑树,已经提交 nuget, 名称:JYKetamaHash
13. 分布式环境搭建
其它我就不知道了,只推荐一个:etcd. 官网:https://coreos.com/etcd/。它是 go 语言的,部署方便。
现在已经有开发作者提供的 c# 的客户端了,很简单。我自己又根据官网的 java 版本转换了一个客户端 c#.
已经提交 nuget, 名称:etcdclient.
14. 中间件 RPC
google protobuf: 不介绍了,网上搜索
ice zeroc: 官网https://zeroc.com/
11. 其它类别总结
(1)数据库操作
DataTable,IDataReader 转换 List<T>. 网上实现很多,我就不多说了。
我自己转换实现了一个扩展库,采用了 emit, 使用.net standard 版本。项目名称:EntityMappingDB
同样可以将 List<T> 转换成 DataTable。
已经提交 nuget, 名称:EntityMappingDB,该项目可以完全替换其它我实现的版本库,Hikari 的扩展库可以完全用它替换。
12. 自己构建 RPC 模型
就是打包一个固定格式,然后在服务端解析。我就不多说了。
我用一个数据库访问服务演示了整套使用. 通信,序列化,同步,加密传输。项目名称:DBAcessSrv
其实数据库访问服务初衷是解决 oracle 客户端安装问题。不需要 oracle 客户端,所有 SQL 发送到一个服务端执行。
现在可以解决云部署,桌面系统不方便访问数据库的问题(需要开放数据库访问端口,很危险)。
其实这些东西我在前面的博文陆陆续续都提到了,也给了大家一些实现的思路方案,这里都是一个总结。所有我自己写的都放到了 git.
哈哈哈,还是照例发个牢骚吧,虽然微软发布了.net core,但是感觉很多例子,方案还是 win 上面的,因为微软自己有 winserver 系统。但是我感觉微软还是应该大力关注 linux. 哪怕自己整款 Linux 系统也行啊。而 win 上面主要应该是 UI 相关的(winform,WPF).