首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储和访问大量数据

问存储和访问大量数据
EN

Stack Overflow用户
提问于 2015-07-25 22:40:44
回答 3查看 289关注 0票数 1

我有一个关于在C#中存储和访问大量数据的问题。

我编写了一个数据分析器和记录器,它必须记录几天的数据。数据每0.1s存储在一个新的二维数组中,目前只“保存”在RAM中。在进行日志记录时,需要能够在GUI中访问数据。实现这一目标的最好方法是什么?简单的二进制序列化速度很慢,并且会使准时的GUI运行不流畅。我也尝试过像db4o这样的数据库,但它们使用了大量的硬盘空间。

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2015-07-25 22:53:44

您不希望将数据存储在数组中。您可以:

a)使用文件系统并将数据写入文本文件,或者更好;

b)使用数据库。如果您不需要标准的数据库解决方案,而是更喜欢更小、更内嵌的解决方案,您可以使用SQLite (here's a getting started guide for C#)

如果你确实想要一些更健壮的东西,并且可以访问SQL Server,那么你可以使用它。如果你想采用类似于SQLite的轻量级嵌入式方法,但又想要一些更“成熟”的东西,我建议你使用LocalDB,MSDN Walkthrough。

票数 0
EN

Stack Overflow用户

发布于 2015-07-26 00:42:29

如果“巨型”并不是真正的巨型,那么也许使用postgreSQL作为数据库就是你的答案。postgreSQL具有数组数据类型,因此您可以直接将数组保存为单个值。ie:考虑这个简单的表,它只有一个Id列(autoinc)和一个用来存储整数的2D数组的aVals:

代码语言:javascript
复制
create table arrayLog (
 id serial,
 aVals integer [][]
)

在C#中,您可以这样做:

代码语言:javascript
复制
using (NpgsqlConnection con=new NpgsqlConnection(@"..."))
{
  string iCmd = "insert into arrayLog (aVals) values (@aVals)";
  var cmd = new NpgsqlCommand(iCmd,con);

  int[,] vals = new int[,] {
    {40,50,90},
    {400,500,900}
  };

  cmd.Parameters.AddWithValue("@aVals", vals);

  con.Open();
  cmd.Parameters["@aVals"].Value = vals;
  cmd.ExecuteNonQuery();
  con.Close();
}

您只需做一次准备工作,并将新数组分配给.Value并连续调用ExecuteNonQuery() (为了提高性能,您可能希望将其与事务包装在一起)。

AFAIK,其他SQL系列数据库,如SQLite,SQL server没有这个能力,但我可能是错的。

票数 0
EN

Stack Overflow用户

发布于 2015-08-11 20:05:28

对于这种情况,我不推荐使用TeaFiles。

基本上,它是对存储在磁盘上的浮点文件中的二进制数据的包装。

下面是主页上给出的示例,看看它是如何工作的:

代码语言:javascript
复制
// define time series item type
struct Tick
{
    public Time Time;
    public double Price;
    public int Volume;
}
 // create file and write values
using (var tf = TeaFile<Tick>.Create("acme.tea"))
{
    tf.Write(new Tick { Price = 5, Time = DateTime.Now, Volume = 700 });
    tf.Write(new Tick { Price = 15, Time = DateTime.Now.AddHours(1), Volume = 1700 });
    // ...
}
// sum the prices of all items in the file
using (var tf = TeaFile<Tick>.OpenRead("acme.tea"))
{
    return tf.Items.Sum(item => item.Price);
}

我在生产中使用它来抽取并绘制数百万个点内的范围,它工作得非常好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31627603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档