对于我的应用程序的操作,我需要从数据库&读取然后编辑几百个Protocol Buffer序列化消息。在每个PB消息中,实际上有4个int
字段和一个boolean
字段,并且在新消息中仅需要更改布尔字段。
我怀疑实现这一目标的最佳方式是什么,从而寻求你的帮助&专家意见。
我想通过创建builder
对象再次构建整个消息会相当昂贵..
答案 0 :(得分:1)
我建议您进行基准测试,看看需要多长时间。您可以在1 ms内执行此操作,这意味着您执行的任何IO可能比处理数据的方式更昂贵。
答案 1 :(得分:1)
构建器方法应该足够便宜,特别是如果您可以在服务器附近执行以最小化延迟。但是,如果位字段具有第一个/最后一个字段编号,则 应该是第二个字节或最后一个字节中的单字节更新,因此如果您愿意,可以在SQL中实现。事实上,只要你想跳过整数(即你不需要知道它们是什么或改变它们),即使在中间选择bool也相当容易。
但首先尝试使用现有客户端的路线;它可能比你想象的要快。
答案 2 :(得分:0)
我建议您重新设计数据库,以便要修改的协议缓冲区消息中的字段位于单独的数据库列中。因此,不是将整个协议缓冲区消息序列化在一列中(这是我假设您现在在数据库中已有的那样),而是以其他方式表示它。然后,您可以使用简单的SQL UPDATE
命令。
我的意思是,使用专为关系数据存储设计的数据库来存储需要更新的序列化数据毫无意义。它妨碍了有效使用SQL。
或者,我不知道是否有专门用于协议缓冲区的数据库,但肯定有XML数据库据称专门用于处理XML文档,因此您可以尝试将数据转换为XML并使用其中一个。虽然这个问题可能有点过头了!但是如果你要完成很多像这样的小任务,那可能是值得的。
但是,如果没有关于您的应用程序和/或数据库用途的更多详细信息,很难说最好的是什么。