序列化在实践中很少使用。
如前所述,序列化最常见的用例是将对象作为Blob存储在会话数据库中。这很好地工作有两个原因:会话往往是短暂的,并且会话数据库如何不知道如何将任意对象映射到关系模型。
对于需要长时间保留的数据(例如Amazon购物车),最佳实践是将这些数据存储在数据库中。
会话持久性机制可确保具有活动会话的用户返回到同一服务器。仅当服务器发生故障并且用户被重定向到新服务器时,才访问会话数据库。新服务器检测到活动的会话,但未在内存中找到它,因此它尝试从会话数据库中检索它,以尝试向用户提供无缝体验。
这种方法有两个问题:
首先,将会话数据刷新到会话数据库是一个缓慢的过程。刷新会话数据经常会降低性能,大多数服务器都配置为每30秒,每分钟或更长时间刷新一次。这种“无缝”故障转移解决方案永远不会100%有效。
其次,我的经验是,大多数客户都同意抛出一条错误消息,要求用户登录并在极少数服务器发生故障的情况下重试。在这种情况下,我们将完全关闭会话数据库,并享受性能提升。
序列化的另一种用途是通过使用诸如Flex之类的框架来提供更快的响应时间,该框架使用序列化和对象图的压缩进行服务器-客户端交互。
正如其他人指出的那样,采用序列化有一些创造性和有用的理由,但是在实践中很少见。
从历史上看,序列化很难正确实现,并且可靠性很高,因此只能在少数情况下使用。大多数开发人员永远不会自己序列化对象,而是可能依赖幕后进行操作的框架。