应用环境为.NET,应用场景如下:
1.服务器通过mqtt订阅网内另一台服务器,作为一个远程客户端进行互操作
2.数据同步:因为数据表在十张以内(第个表不超过30行),第一次同步时,全部同步过来
3.打开相关网页时,将数据表再同步一遍
4.因为本机sql已经写好,想复用。于是想到,将同步的远程表建立到一个虚拟数据库。这样,如果页面操作的是远程机,则用现有的sql读写虚拟表
不知有何种方式可满足需求,或有更好的方式完成以上应用场景?
目前来这方案实现困难
1.浏览器不是用来改这个的,浏览器自己带localStorage和Sessionstorage,但是他的设计只是保存少量数据
2.mqtt也不是用来干这个的,mqtt是专门为IOT场景设计的,他设计目标就是短,平,快。他不适合用来传输大型数据集
综合你的要求,建议是etcd,etcd自己有变更通知。etcd也允许你将本地变更同步给别人的(redis也行,不过redis默认为了照顾性能把变更通知关闭了)
话说:我始终没看明白,有mqtt想怎么通知就怎么通知,传递的是对象。干嘛非折腾啥sql。下发数据就是下发数据,咋非描述成查询数据库sql
其实丢掉后台思维,直接用前端思维就行。你这样设计,一个正统的前端就只能喊“活见鬼”了
1.网页加载,你给个api去获取那台机器的配置,别跟我说啥“虚拟数据库”,
如果客户机在线就mqtt呼叫下位机让他把当前配置发一下,如果不在线api返回最后配置或者默认配置
当然这样设计会被前端打死,他们根本不关心这个过程。所以你要们给他api返回结果,要么直接让他从etcd,redis里获取
2.vue也好其他前端框架也好,前端改怎么修改怎么修改。你要跟前端说啥sql,还是被打死的命(你要实在想把后端的想法灌输给他们,还不如让他们试用一下linqjs,对他们有linqjs用,某些方面比他们自己原始Array好用,这种强行灌输可以成)
3.修改关闭了,给个按钮叫下发配置。依旧还是api提供出去(还是前面的问题,远程客户有可能在线,也有可能不在线,需要你后端api代理完成,你让前端去做,还是会被打死) 或者直接让他保存到etcd(还是那句话,前端的人压根就不想管你怎么做,这根本就不属于他们的认知范围)
【以下回答由 GPT 生成】
在.NET环境下,您可以考虑使用以下内存数据库来满足您的需求:
using System.Data.SQLite;
SQLiteConnection connection = new SQLiteConnection("Data Source=:memory:;Version=3;New=True;");
connection.Open();
using System.Data.SqlServerCe;
SqlCeConnection connection = new SqlCeConnection("Data Source=:memory:;");
connection.Open();
如有更好的方式来满足您的需求,取决于具体的应用场景和需求。上述的方式都提供了内存数据库的功能,并且可以使用现有的SQL查询语句。您可以选择根据具体的需求来评估并选择最适合您的场景的方式。
MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。
那么你在使用MQTT时去同步数据时,如果数据量过大,MQTT可能会出现性能不足的情况。你通过页面加载去处理数据表同步的活动如果在短时间不断刷新页面这种情况也应该考虑到。
还有如果要将远程表建立到虚拟数据库中,您可以考虑使用Entity Framework Core,使用orm框架不是更容易吗,然后将远程表映射到.NET应用程序中的模型类。最后可以使用这些模型类执行SQL操作,就好像它们是本地表一样。这样,您可以重用已有的SQL代码。