首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Akka-CQRS(0)- 基于akka-cluster的读写分离框架,构建gRPC移动应用后端架构

上一篇我们讨论了akka-cluster的分片(sharding)技术。在提供的例子中感觉到akka这样的分布式系统工具特别适合支持大量的带有内置状态的,相对独立完整的程序在集群节点上分布运算。这里重点要关注这些程序的内部状态,它们会占用系统资源包括内存。把状态保存在内存里相对存放在数据库里能显著提高程序运算效率。在系统出现各种情况下对这些非持久化的程序状态的管理自然就成为了需要考虑的问题,此其一。在一个多用户、高并发的大型分布式系统里往往数据库数据使用会产生大量的冲突影响系统性能。如果能够把数据库的写入和读取分成互不关联的操作就可以避免很多资源占用的冲突。

02

缓存层如何设计

马克-to-win:我们前面讲过 了n-tier架构。在我们的程序当中,还可以设计一个缓存层。在去访问数据库之前,先看看缓存层中有没有数据,如果没有的话,从数据库取完数据回来,一 定要放在缓存层当中一份,下次就不用去数据库了。马克-to-win:如果对数据库当中,某个数据更新了,同时一定要记住也更新一下缓存当中的数据。这样的话,既保证了缓存的 数据是最新的,也保证了将来查询时不用去查数据库,减轻了对数据库的压力。 这里有些问题,问题1,如果除了你的项目,还有其他的地方可以更改数据库,怎么办?可以做一个守护线程,发现某个表的版本变了,就重新把表的数据加载回你 的缓存。问题2,对于条件查询,如何处理缓存?比如30元到50元的衣服数据的第二页。大家通常的做法是,把整个衣服表都加载到缓存中,无非就是一个 List,之后整个做个遍历,把符合条件的选出来。为什么要整个加载?因为别人还有可能要查20到40块钱的第五页的数据。问题3,项目a处需要看表的 123列,b处需要看表的456列,缓存时就直接把123456列作为一个表缓存起来,供两处使用。马克-to-win:顺便说一句,缓存也可以缓存图片。数据库和图片服务 器,可以认为是大的仓库,什么都能找到,而缓存可以看做是前端的商店,客户经常要买的东西就存一部分在商店,这样可以提高效率。如果商店没有相应的商品, 也不用着急,因为我们后面的仓库肯定有。

00

mysql executenonquery_ExecuteNonQuery()返回值注意点

查询某个表中是否有数据的时候,我用了ExecuteNonQuery(),并通过判断值是否大于0来判断数据的存在与否。结果与我所设想的很不一致,调试时才发现,其执行后返回的结果是-1,对此我很是不理解,回头查了下资料,如下显示: SqlCommand.ExecuteNonQuery 方法对连接执行 Transact-SQL 语句并返回受影响的行数。 备注:可以使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句,在不使用 DataSet 的情况下更改数据库中的数据。 虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1 看完后才明白,原来select语句不适合ExecuteNonQuery()方法,原来是这样,真笨,方法用错了!特意把它记录下来,希望朋友不要犯类似的错误!

02
领券