【发布时间】:2014-11-02 12:25:10
【问题描述】:
我们有一张大桌子,里面有很多列。迁移到 MySQL Cluster 后,无法创建表,原因是:
错误 1118 (42000):行大小太大。使用的表类型的最大行大小(不包括 BLOB)为 14000。这包括存储开销,请查看手册。您必须将某些列更改为 TEXT 或 BLOB
举个例子:
@Entity @Table (name = "appconfigs", schema = "myproject")
public class AppConfig implements Serializable
{
@Id @Column (name = "id", nullable = false)
@GeneratedValue (strategy = GenerationType.IDENTITY)
private int id;
@OneToOne @JoinColumn (name = "app_id")
private App app;
@Column(name = "param_a")
private ParamA parama;
@Column(name = "param_b")
private ParamB paramb;
}
这是一个用于存储配置参数的表格。我在想我们可以将一些列合并为一个并将其存储为 JSON 对象并将其转换为一些 Java 对象。
例如:
@Entity @Table (name = "appconfigs", schema = "myproject")
public class AppConfig implements Serializable
{
@Id @Column (name = "id", nullable = false)
@GeneratedValue (strategy = GenerationType.IDENTITY)
private int id;
@OneToOne @JoinColumn (name = "app_id")
private App app;
@Column(name = "params")
//How to specify that this should be mapped to JSON object?
private Params params;
}
我们定义的地方:
public class Params implements Serializable
{
private ParamA parama;
private ParamB paramb;
}
通过使用它,我们可以将所有列合并为一个并创建我们的表。或者我们可以将整个表拆分成几个表。我个人更喜欢第一种解决方案。
无论如何,我的问题是如何映射作为文本并包含 Java 对象的 JSON 字符串的 Params 列?
【问题讨论】:
-
如果您有很多配置参数,只需使用具有 2 列的普通表:键和值并将其加载到映射。如果您想将参数存储为 JSON 或 XML,只需将其存储/读取为文本并稍后转换。
-
@Rad 确实 this 帮助你
-
@user1516873 我们认为这是最终解决方案。如果我没记错的话,它会在尝试修改数据时增加复杂性。还是谢谢。
-
@ankur-singhal,我不确定。我们正在为我们的表使用带有 NDBCluster 引擎的 MySQL 集群。它仍然适用吗?