Apache Ignite中的内存消耗-BinaryObject vs具体类vs SQL

时间:2019-01-02 21:37:42

标签: database ignite in-memory-database

我想知道如何在Ignite中保存数据。据我了解,有三种方法:

  1. 使用以BinaryObject作为值的数据网格-主要优点是对象可以是动态的。
  2. 使用具有具体类(例如Employee)作为值的数据网格。
  3. 使用SQL接口,并使用预定义的架构。

您知道这些方法之间在内存消耗方面是否存在差异?我怀疑至少在使用BinaryObject时,系统必须保存键(某些序列化表示形式),因此它可能比其他方法占用更多的内存。

什么是最具成本效益的方法?

谢谢! 加仑

1 个答案:

答案 0 :(得分:1)

这两种方法在占用空间方面没有区别。任何提及的方法都可用于访问相同的数据,因为它们都以BinaryObject格式运行。但是它们在其他方面有所不同。

使用POJO类时,每次访问或修改数据时都会发生序列化和反序列化为二进制格式。此方法导致更高的CPU使用率和堆内存消耗。请注意,存储的内存保持不变,但是占用空间会增加。

BinaryObject方法在性能方面更有效,因为它不需要序列化。 BinaryObject接口直接与序列化表示形式一起使用。

SQL还可以对BinaryObjects进行操作而无需反序列化,因此方法1和3之间没有太大区别。SQL有几点,但是应该考虑在内。参见https://apacheignite-sql.readme.io/docs/performance-and-debugging