【发布时间】:2013-11-26 19:17:08
【问题描述】:
有人可以通过向我展示如何映射这两种类型来帮助我吗:
case class forumQuote(
index: Int,
startOffset: Int,
endOffset: Int,
isDirect: Boolean,
quotedId: Int)
case class forumQuotes(quotes: List[forumQuote])
在postgres中表示为:
CREATE TYPE forum_quote AS
(
index INTEGER,
q_start_offset INTEGER,
q_end_offset INTEGER,
is_direct BOOLEAN,
quoted_id INTEGER
);
在
中用作数组字段CREATE TABLE forum_posts
(
...
quotes forum_quote [],
...
)
在我自己的升降桌中用作:
object ForumPosts extends Table[...] {
...
def quotes = Column[forumQuotes]("forum_quotes")
...
}
注意:我不希望看到任何 JDBC 数组的使用,因为稍后我需要用 hstore 做一些时髦的东西 (Key[String] => Value[Array[T]]),其中 T 是一个 postgresql 记录。
【问题讨论】:
-
这似乎是一个非常奇怪的数据设计——这是一个非常丰富的数据结构,可以存储在单个列中。拥有一个带有指向
forum_posts的外键的forum_quotes表(因为这是一对多的关系)然后让您的ORM 为您遍历它不是更有意义吗? -
太慢了。我有几个原始数据(大约 20 个,没有索引)。稍后我将构建自定义倒排搜索索引,我主要是学习如何为此目的进行操作。
-
我不知道您正在使用的技术,但我想知道是否有其他方法可以解决实际的潜在问题,而不需要这种非标准/不寻常的功能:a " NoSQL”文档存储?一种延迟加载方法来获取您检索到的帖子的引号(我认为您永远不会以相反的方式加载,否则这种结构真的没有意义)?比 ORM 生成的更能利用索引的自定义 SQL?
-
postgres 完全有能力做这种“非标准”的东西。作为 gist/gin 索引结构的证明。数据透视是您获得 nosql 优势的方式。如果您永远不需要在数据 A 的隔离中访问数据 B,并且它是一对多的关系,那么只有旋转它才有意义。有问题的数据不需要在索引中。然而,在我的工作中,hstore/gin 的性能比传统索引要好。我正在移植现有的代码,在我转移到 hstore 的东西之前,我想尝试一些更简单的东西。否则我会成为一种关系。
标签: postgresql orm slick