我正在研究表示事务数据库的方式,可以将其视为列表元素列表,这些列表上的未来操作将意味着:投影,减少,获取最大值,分割,减少某些元素等等在......
type Item = int
transaction :: [Item]
database :: [transaction]
for example [[1,2,3], [2,3,4]]
我以前的作品使用 trie 来表示这样的数据结构
data LexicoTreeItem = Nil | Node item LexicoTreeItem LexicoTreeItem int
-- lexicoTreeItem item next alt weigth
-- item is the item of the node
-- next is the rest of the transaction, each path of the trie is a transaction
-- alt is another transaction starting with the item
-- weigth is the number of transactions which use this item
例如表示[[1,2,3],[1,2,3,4]]
1 - 2 - 3
|
3 - 4
一个人会写
Node 1 (Node 2 (Node 3 Nil Nil 1) (Node 3 (Node 4 Nil Nil 1) Nil 1 ) 2 ) Nil 2
问题是在处理haskell中的并行性时,这种数据结构效率不高。
我了解Data.Array.Repa
比Data.Array
和Node
更有效地处理了并行性。
但我不知道如何代表上述数据库。在能够进行操作的方式如:投影,缩小,列表,最大值,抑制更多但是...并行使用Haskell
感谢任何人的回复
答案 0 :(得分:3)
Data.Array.Repa可以处理二维数组,但它们必须是矩形的。 [[Int]]表单不强制执行矩形形状。如果是矩形,则可以使用Data.Array.Reap.fromList将展平的[Int]转换为数组。