`
edwardpro
  • 浏览: 310137 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

用json作为配置存储介质的讨论

阅读更多

为什么会考虑json:

有没有这样的场景,当需要增加一个新配,假设配置存储在数据库中,会有什么问题?一般的做法大概就是增加一个字段,修改下映射,或者修改sql语句,然后需要回归所有功能同样在前端需要修改你的数据bean....一个浩大的工程似乎....

那么我们进阶下,假设现在换一种思路我们把数据映射到hashmap,那么首先数据库层的变动逃不掉的,接下来bean可以逃掉,但是带来的问题就是没有了类型...而且应用层需要大范围修改,更加不好的是我们需要对bean->map的一个映射,对象是白白创建的!!!

 

好了换一种思路吧,假设我们的配置项不太多,也就是10个,总字符不会超过500,而且读取都是单条的(这点还是很重要的)好了,那么我们现在在数据表中只建立一个字段,所有配置用json来传递,看看变化:

1) 不再需要修改数据结构

2) 那么也就没有了修改数据层代码的需要

3) 返回的就是map我们很开心的吧...

带来的问题: 类型怎么办?

java是类型语言不能搞得全部到处都是map吧,这个很难看,很不专业,关键你可能会在map里塞一个不可序列化对象!!! 好了,那我们来解决这个问题:

我想到了序列化这个东东,我们来改造下我们的所有数据bean的序列化对象吧,这样带来的结果就是map直接可以变成bean了,当然这中间对象是同事创建的一个json的map一个bean,好吧,效率虽然损失点,但是代码没得改动啦,很好很强大,当然注意这种方法是有侵入性的,也就是我们必须要解决整个的对象全部都是这个json序列化对象,否则就要exception了,这点和java的对象序列化原则一样.

似乎是完美的,但是注意这里有几个禁区:

1) 读取不能是一堆堆的,这样数据库层是很慢的,付出代价很高,所以只能搞配置或者一些模板性质的玩意

2) 不合适大量的自定义对象,这样使得嵌套很复杂容易出事,而且我必须对应翻译大量java的自定义对象,当然你可以用装饰器搞定,但是效率呢...

3) 不能对配置项进行数据查询和统计,这是它的知名弱点,如果你经常要知道a这个参数老是设置成1的用户多少,那么请绕行.

4) 补充的是领导提的,当你需要对所有数据做更新时可能需要停机做数据修正,而且效率很低!所以经常要干这个事情的时候请考虑是否能够承受这样的行为.

好了,尽管有些弱点,但是我们想想,它的优点很多:

1) 完全屏蔽了数据更改

2) 看起来很容易理解

3) 在应用中用起来多爽

4) 相比xml它的数据量很小啊,因此序列化成本并不高

5) 在多种语言中能用,这个当然得益于json本身的推广

 

好了,空谈了一把,目前还没有代码生成,尝试搞搞看看,感谢phprpc给我的灵感,呵呵

2
0
分享到:
评论

相关推荐

    JavaScript_简单快速的JSON数据库.zip

    LowDB利用JSON文件作为存储介质,这使得数据管理变得直观且易于操作。它提供了类似于MongoDB的API,让开发者可以使用JavaScript语法进行CRUD(创建、读取、更新、删除)操作。 使用LowDB,你可以方便地在Node.js...

    嵌入式软件开发下的数据积累.doc

    在嵌入式Linux系统中,数据通常存储在各种类型的存储介质上,例如闪存(Flash)。在这个例子中,我们有一个16MB的Flash芯片,分为五个分区,其中一个称为"parameter"分区,专门用于存储数据参数。在Linux系统中,...

    商业编程-源码-ini文件读写代码.zip

    1. 用户设置:商业软件经常需要保存用户的个性化设置,如界面布局、字体大小等,ini文件是理想的存储介质。 2. 应用程序配置:记录程序的运行环境、数据库连接信息等,方便程序启动时加载。 3. 数据备份:对于小型...

    22-10-13-08-SqlSugarAcquaintance(第3方日志中间件NLog-v5.0.4)

    它允许开发者轻松地将日志数据写入不同的存储介质,从而满足持久化需求。安装NLog可以通过NuGet包管理器进行,添加`NLog`和`NLog.Web.AspNetCore`依赖。 接下来,我们讨论如何在.NET Core 6项目中配置NLog。在`...

    河南大学教务系统爬虫!

    4. **存储器**:将解析后的数据保存到本地文件、数据库或其他存储介质。 5. **爬虫框架**:如Scrapy(Python)、Jsoup(Java)等,它们提供了完整的爬虫开发框架,简化了开发过程。 在Java中,实现爬虫可能需要以下...

    Log4j2手册阅读随笔(Log4j2新特性)

    此外,日志输出可以保存到持久的存储介质中,便于将来研究。日志记录不仅可以用于开发周期中,一个足够丰富的日志记录包也可以作为一个审计工具。 手册的“Introduction”部分提到了日志记录的重要性,说明它不仅有...

    NoSQL数据库笔谈

    - **基于磁盘的和内存中的实现**: 根据数据的访问频率和重要性选择合适的存储介质。 - **仅仅是炒作?**: 探讨NoSQL是否仅仅是一种流行趋势还是真正带来了实质性的改进。 ### 结语 本书不仅整合了NoSQL数据库领域的...

    基于Python的可视化工具研究与应用.pdf

    通过Python的数据可视化,运维人员可以以图表形式清晰地了解检修工作安排、人员配置以及服务器、数据库、存储介质、中间件和应用程序的状态。这样的可视化不仅可以提高工作效率,还可以帮助集中管理信息系统。 综上...

    ThinkPHP5完全开发手册

    - **日志写入**:讲述了如何将日志信息写入到文件或其他存储介质中。 - **独立日志**:介绍了如何为不同的模块或环境配置独立的日志记录。 - **日志清空**:讲解了如何定期清空日志文件。 - **写入授权**:讲述了...

    完整版游戏菜单.rar

    RAR支持分卷压缩,这意味着大文件可以分割成若干小的RAR文件,便于在有限的存储介质或网络上传输。此外,RAR还提供了修复功能,能够在文件损坏时尝试恢复数据。 2. **压缩算法**:RAR使用了称为Roshal Lempel-Ziv-...

    関連仕様.doc関連仕様.doc関連仕様.doc関連仕様.doc関連仕様.doc

    - **数据持久化:** 是指将数据存储在非易失性存储介质上的过程,即使在系统关闭后数据也能保持不变。 - **实现方法:** - **数据库:** 使用关系型数据库或NoSQL数据库保存数据。 - **文件系统:** 将数据写入...

Global site tag (gtag.js) - Google Analytics