标签: in-memory

在内存中的SQLite数据库中使用NHibernate进行测试时出现随机错误

我有一个系统,它在收到消息后 - 将其排队(写入表),另一个进程轮询数据库并将其出列以进行处理.在我的自动测试中,我已经在同一个过程中合并了操作,但是不能(在概念上)合并来自两个操作的NH会话.

自然 - 出现问题.

我已经阅读了关于让SQLite-InMemory-NHibernate组合在测试环境中工作的一切,但由于"没有这样的表"错误,我现在遇到了随机测试失败.为了说清楚 - "随机"意味着具有相同确切配置和代码的相同测试有时会失败.

我有以下SQLite配置:

return SQLiteConfiguration
 .Standard
 .ConnectionString(x => x.Is("Data Source=:memory:; Version=3; New=True; Pooling=True; Max Pool Size=1;"))
 .Raw(NHibernate.Cfg.Environment.ReleaseConnections, "on_close");
Run Code Online (Sandbox Code Playgroud)

在我的测试开始时(每次测试),我获取"静态"会话提供程序,并请它刷新现有的数据库清理,并重新创建模式:

public void PurgeDatabaseOrCreateNew()
{
    using (var session = GetNewSession())
    using (var tx = session.BeginTransaction())
    {
            PurgeDatabaseOrCreateNew(session);
            tx.Commit();
    }
}

private void PurgeDatabaseOrCreateNew(ISession session)
{
    //http://ayende.com/Blog/archive/2009/04/28/nhibernate-unit-testing.aspx
    new SchemaExport(_Configuration)
        .Execute(false, true, false, session.Connection, null);
}
Run Code Online (Sandbox Code Playgroud)

所以是的,它是在不同的会话上,但是连接是在SQLite上汇集的,所以我创建的下一个会话将看到生成的模式.然而,虽然大多数时候它都有效 - 但有时后来的"入队"操作会失败,因为它无法看到我传入消息的表格.此外 - 每个测试套件运行似乎最多发生一次或两次; 并非所有的测试都失败了,只是第一个(有时是另一个.不太确定它是否是第二个).

最糟糕的是随机性,自然而然.我告诉自己我现在已经修好了几次,只是因为它只是"停止了失败".随意.

这种情况发生在FW4.0,System.Data.SQLite x86版本,Win7 64b和2008R2(总共三台不同的机器),NH2.1.2,配置了FNH,在TestDriven.NET 32b precesses和NUnit控制台32b进程上.

救命?

testing nhibernate system.data.sqlite in-memory

8
推荐指数
1
解决办法
944
查看次数

如何检查Spark RDD是否在内存中?

我有一个org.apache.spark.rdd.RDD [MyClass]的实例.如何以编程方式检查实例是否为persist\inmemory?

in-memory apache-spark rdd

8
推荐指数
1
解决办法
2258
查看次数

用于单元测试的内存DBMS

我正在寻找令人满意的单元测试我的.NET DAL类的选项; 因为它们是DAL类,所以它们使用ADO.NET直接访问数据库.目前我使用MSSQL数据库的一个实例进行测试,但是想知道有哪些更快的选择 - 因为单元测试需要尽快运行,内存解决方案将是理想的选择.

我还应该提一下,我已经把自己绑在TSQL上,因为我只会使用微软平台.

.net data-access-layer embedded-database in-memory

7
推荐指数
1
解决办法
8800
查看次数

在log4j的内存'list appender'中

是否存在log4j的追加器,它只存储一个日志事件列表(用于单元测试,以验证没有写入错误日志)?

java log4j in-memory appender

7
推荐指数
1
解决办法
5535
查看次数

内存中的SQLite数据库可以扩展并发吗?

为了防止清除SQLite内存数据库,必须使用相同的连接来访问数据库.但是,使用相同的连接会导致SQLite同步对数据库的访问.因此,如果我有许多线程对内存数据库执行读取,则在多核计算机上它比针对文件支持的数据库运行的完全相同的代码要慢.

有没有办法让两全其美?也就是说,一个允许对数据库进行多次并发调用的内存数据库?

sql sqlite concurrency scalability in-memory

7
推荐指数
1
解决办法
1993
查看次数

有没有办法在R中读写内存文件?

我正在尝试使用R来分析大型DNA序列文件(fastq文件,每个文件几千兆字节),但这些文件的标准R接口(ShortRead)必须立即读取整个文件.这不适合内存,因此会导致错误.有什么方法可以一次读取几(千)行,将它们填入内存文件,然后使用ShortRead从内存文件中读取?

我正在寻找像Perl的IO :: Scalar这样的东西.

file-io memory-management r in-memory large-files

7
推荐指数
1
解决办法
1108
查看次数

Java中IP地址过滤器的内存数据结构的最佳选择

我有像这样的CIDR格式的文件,192.168.1.0/24它被转换为这两个列结构

3232236030 3232235777
Run Code Online (Sandbox Code Playgroud)

每个字符串IP地址转换发生在以下代码中:

String subnet = "192.168.1.0/24";
SubnetUtils utils = new SubnetUtils(subnet);

Inet4Address a = (Inet4Address) InetAddress.getByName(utils.getInfo().getHighAddress());
long high = bytesToLong(a.getAddress());
Inet4Address b = (Inet4Address) InetAddress.getByName(utils.getInfo().getLowAddress());
long low = bytesToLong(b.getAddress());

private static long bytesToLong(byte[] address) {
   long ipnum = 0;
   for (int i = 0; i < 4; ++i) {
       long y = address[i];
       if (y < 0) {
           y += 256;
       }
       ipnum += y << ((3 - i) * 8);
   }
   return ipnum;
}
Run Code Online (Sandbox Code Playgroud)

考虑到有超过500万条目 …

java ip filter in-memory

7
推荐指数
1
解决办法
4822
查看次数

不转储到 tmp 中的内存文件路径

python中有没有办法获取内存文件的路径,因此对于需要文件路径的方法,它会像普通文件一样运行?

我的目标是保护文件,从而避免转储到 /tmp。

尝试读取加密文件 -> 将文件解密到内存中 -> 将其路径用于其他接口。

mmap不提供路径或文件名。

或者这个问题的任何替代解决方案?

python encryption mmap data-protection in-memory

7
推荐指数
1
解决办法
2424
查看次数

什么时候使用Redis?什么时候去塔兰图尔?

我不想进行详细的比较。我也不想定义“什么是最好或最快的”内存数据库。

它们都很相似,所以我想了解一下关键差异的概述。

那么它们是什么?

database in-memory nosql redis tarantool

7
推荐指数
1
解决办法
1472
查看次数

使用节点从内存缓冲区(非磁盘)创建 tarball 并将结果存储在内存中

假设我有两个缓冲区:

const bufferFile1 = Buffer.from('Hello World!', 'utf-8')
const bufferFile2 = Buffer.from('Hello Again World!', 'utf-8')
Run Code Online (Sandbox Code Playgroud)

我如何创建 tarball 文件缓冲区/流/blob(不写入磁盘),其中上面的两个缓冲区应作为 tarball 中的两个文件存储。我希望(能够)通过管道传输 tarball 作为对请求的响应。

我研究过使用tar包。但这个解决方案需要路径而不是内存流/缓冲区。

这有可能实现吗?

PS:我对内存文件处理的经验很少。


整个项目是创建一个api端点

  • 接受参数作为 POST 正文或 url 查询参数。
  • 创建一组内存文件,其内容基于输入
  • 根据这些文件创建一个 tar.gz 文件
  • 使用 GridFS 将 tar.gz 文件存储在 mongodb 中

我真的没有地方临时存储文件(无服务器环境),这就是为什么我希望解决方案完全在内存中。

buffer file tar in-memory node.js

6
推荐指数
1
解决办法
1115
查看次数