mapr-fs 架构_MapR-DB的Scala对象序列化

mapr-fs 架构

P reviously,我们已经讨论了一些优势和特点伴随MAPR-DB。 但是,这一次,我们将在使用此企业级数据库时动手操作。

使用MapR-DB时,由于MapR-DB数据是使用JSON格式存储的,因此通常始终将JSON中的业务对象(通常称为POJO)从JSON序列化和反序列化。 这些操作非常常见且频繁,因此我们将从Scala的角度对其进行研究。

MapR-DB文件API

创建新对象并将其插入MapR-DB需要遵循一系列步骤。 让我们看一下典型的工作流程。

这是插入MapR-DB的基本步骤。 可以将该片段扩展为更复杂的用例,但从本质上讲,它们将看起来与此非常相似。

这里有一个很容易识别的问题。 我们通过流畅的API创建document对象的方式远非方便。 通常,我们希望传递POJO而不是手动构建文档。

在Java中,我们可以执行以下操作。

在上面的代码中,我们可以看到我们的Link类用于创建将保存到数据库的文档。 MapR-DB将利用Java Beam对象创建文档对象。

现在,使用Scala时,问题变得更加乏味,无论如何,这应该是您选择的语言。

Scala问题

使用Scala,我们还可以像Java中一样使用Java Bean创建所需的对象,但是很快就会出现其他问题。 我们来看一下之前使用的相同示例,但是这次是在Scala中。

如果您尝试此操作,则会发现由于值_id_开头,因此无法将对象link转换为Java Bean。 这可能看起来很小,但是插入到MapR-DB的所有文档都应具有_id字段,以将最初的小问题转换为交易破坏者。

我们总是可以回过头来为每个POJO对象使用手动对象构造,但是出于显而易见的原因,我们应该尽快放弃这种想法。

另一种选择是查看将Scala对象转换为Document的机制。 显然,我们需要一个类型类来完成繁重的工作并为转换系统带来灵活性。

让我们定义一个用于完成这项工作的类型类。 由于缺少更好的名称,因此将其命名为MySerializer

如我们所见, MySerializer使用默认方式使用Jackson序列化将对象转换为文档。 拥有默认的序列化器是一个不错的选择,因为大多数对象都将使用它,但是并不是每个人都使用相同的构建器,因此我们也需要专门化。

现在,我们的代码将如下所示。

如前所述,有时默认的文档转换无效,例如,让我们看下面的示例。

在试图将生成的文档保存到数据库时,将默认转换器与Person会导致错误。 如前所述,MapR-DB需要_id作为文档密钥。 在这种情况下,我们需要为Person类定制一个转换器。

这就是类型类机制的亮点。 我们可以指定从Person创建文档的确切方法。 让我们看看如何。

请注意,我们有两种选择,一种是使用默认的序列化器,第二种是对有问题的特定对象使用定制的序列化器。 这允许使用细粒度的序列化机制,该机制最终会产生通用性,而无需进行专门化。

同时,序列化系统在对象本身之外。 我们应该能够修改序列化的工作方式而完全不影响对象。 最终,我们可以基于特定的上下文覆盖序列化的完成方式,同时针对需要的不同情况使用不同的序列化机制。 这在Java中几乎是不可能做到的,但是Scala是Ad-Hoc多态世界中的野兽。

结论

MapR-DB OJAI API很好,但是它不能与Scala对象一起使用,特别是在那些不符合Java Bean规范的对象周围。 另一方面,Scala提供了诸如类型类之类的高级构造,使我们能够解决许多互操作性问题,同时保持类型安全性并启用即席多态性。

感谢 Lombok Project 帮助我们编写更简洁的Java代码。

感谢S imulacrum 在不用样板的情况下在Scala中启用类型类。

翻译自: https://hackernoon.com/scala-object-serialization-for-mapr-db-792817d3962d

mapr-fs 架构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值