2012-02-29 76 views
1

在Cassandra中存储完全序列化对象的优点和缺点与只在对象内存储更多基元类型的列有什么区别?在Cassandra中存储基元类型与对象类型

在我看来,如果您将整个对象存储在一列中,您会失去灵活性,但会获得简单性。如果一个完整的对象被存储了,并且你想索引它的一个成员,那么在列上使用本地的Cassandra二级索引不是不可能的吗? (虽然我想在这里你会创建一个额外的列家族使用该成员值作为行键创建自己的索引)

感谢您提供任何信息。我仍然围绕这种格式的模式设置进行包装。

回答

2

既有优点也有完整的对象序列化的缺点似乎很明显:

  • 更多和磁盘上传输数据时
  • 能够使用支持模式演变的工具,如储蓄或protobuf的
  • 紧凑表示

和缺点:

  • Cassandr本地索引无法在此处使用(cassandra本机索引与数据分区在一起,因此无法使用另一个列系列进行模拟)
  • 无法使用常用工具(如CLI)查询对象的单个字段
  • 修改对象的单个字段需要加载并保存完整记录
  • 修改架构需要加载和处理完整数据集(例如,无法删除列)。

因此,例如,在存储pageview事件时使用完全对象序列化是一个好主意 - 紧凑性可以节省大量的磁盘空间,写入后这些事件永远不会被修改。即使模式更改(即添加了新字段),也不需要触摸旧数据,只需以新格式写入新事件并使用ProtoBuf正确读取旧记录和新记录即可。

另一方面,当存储像'带标题和标签的图片'这样的对象时,使用它是一个糟糕的主意 - 这些东西有大量的二进制数据和小的可变域。

相关问题