.net 使用F在MySql数据库中存储数据结构#

.net 使用F在MySql数据库中存储数据结构#,.net,mysql,f#,.net,Mysql,F#,我需要在MySql数据库中存储大型而复杂的数据结构(我使用F#)。现在我有两个想法: 仅使用structs(limiting),然后为该struct创建一个nativeptr,转换为nativeptr,并将所有内容加载到字节[]中,字节[]是一个MySql blob 使用F#反射库将所有内容转换为JSON和JSON,并存储为字符串(sloow) 有没有我错过的更好的方法?这两种方法哪一种更好 谢谢 我认为将F#数据结构存储为二进制blob或文本数据不是一个好主意-如果使用关系数据库,则应将数据存

我需要在MySql数据库中存储大型而复杂的数据结构(我使用F#)。现在我有两个想法:

仅使用structs(limiting),然后为该struct创建一个nativeptr,转换为nativeptr,并将所有内容加载到字节[]中,字节[]是一个MySql blob

使用F#反射库将所有内容转换为JSON和JSON,并存储为字符串(sloow)

有没有我错过的更好的方法?这两种方法哪一种更好

谢谢

我认为将F#数据结构存储为二进制blob或文本数据不是一个好主意-如果使用关系数据库,则应将数据存储到具有(合理)列的表中

最直接的方法是使用ADO.NET(MySQL已经有了)。从F#调用ADO.NET的代码本质上与从C#调用ADO.NET的代码相同。请参阅使用
MySqlConnection
的示例(PDF)

通过在F#中使用
(动态)运算符,可以使数据读取变得更精确。我写了一个,但它也可以适应MySQL

最后,MySQL似乎还有实体框架的提供者(),因此您可以使用F#LINQ支持(但当前版本对EF查询的支持有些有限,因此它只能在简单的场景中工作).

我认为将F#数据结构存储为二进制blob或文本数据不是一个好主意-如果您使用的是关系数据库,则应将数据存储到具有(合理)列的表中

最直接的方法是使用ADO.NET(MySQL已经有了)。从F#调用ADO.NET的代码本质上与从C#调用ADO.NET的代码相同。请参阅使用
MySqlConnection
的示例(PDF)

通过在F#中使用
(动态)运算符,可以使数据读取变得更精确。我写了一个,但它也可以适应MySQL


最后,MySQL似乎还有实体框架的提供者(),因此您可以使用F#LINQ支持(但当前版本对EF查询的支持有些有限,因此它只能在简单的场景中工作)。

对于简单的事情,我就是这么做的(我编写了一个很好的库,使用反射将表转换为记录,反之亦然)。但我说的是大型数据结构,它会浪费大量的时间和内存存储在表中。数据库设计用于将数据存储在表中,因此它们为此进行了优化。请看一些关于F#adCenter项目的演示(例如。)好吧,他们使用了与你建议的类似的方法(将记录映射到表中),而且对他们来说效果很好。规模非常惊人-6TB的数据。(读取…)但是,例如,大型树或图形呢?为了从表中重建树,我需要读取所有相关节点(我可以给每棵树指定ID)“我想树(或其他更复杂的数据结构)可能是个例外。好吧,adCenter项目主要使用列表。也许NoSQL也值得考虑。”(但我对这些技术没有任何经验)对于未来的读者:因为我只有这三种方式,所以我选择了Tomas的方式(简而言之,将每个表绑定到一个记录类型),因为blob方式太有限,JSON非常慢。我有一个编译库来管理这两种简单绑定(1个表到1个记录类型)和联合查询的绑定(将多个表绑定到一个记录类型)。如果有人需要,他/她可以与我联系。对于简单的事情,我就是这么做的(我使用反射编写了一个很好的库,它可以将表转换为记录,反之亦然).但我说的是大型数据结构,它会浪费大量的时间和内存存储在表中。数据库的设计目的是将数据存储在表中,因此它们为此进行了优化。请看一些关于F#adCenter项目(例如)的演示。好的,它们使用了与您建议的类似的方式(将记录映射到表中)这对他们来说效果很好。规模非常惊人-6TB的数据。(读取…)但是,例如,大型树或图形呢?为了从表中重建树,我需要读取所有相关的节点(我可以给每棵树赋予ID),然后自己开始构建。不难(在F中),但在我看来(我不是专家)比使用指针和blob慢。@Ramon:我想树(或其他更复杂的数据结构)可能是个例外。好吧,adCenter项目主要使用列表。也许NoSQL也值得考虑(但我对这些技术没有任何经验)对于未来的读者:因为我只有这3种方式,所以我选择了Tomas的方式(简而言之,将每个表绑定到一个记录类型),因为blob方式太有限,JSON非常慢。我有一个编译库来管理简单绑定(1个表到1个记录类型)和联合查询的绑定(多个表对应一种记录类型)。如果有人需要,可以与我联系。