我正在使用derby作为嵌入式数据库.此外,我正在使用它的内存数据库选项进行单元测试.
我无法弄清楚的是如何正确关闭(快速查看代码) Derby数据库.我相信我让它适用于标准数据库但我在内存数据库中尝试类似代码时会遇到不同的异常.
我将省略细节,如果需要其他感觉,我会添加它们.
基本上,我试图在这两种方式中关闭我的数据库,我的内存数据库一直被称为"呃":
DriverManager.getConnection("jdbc:derby:memory:eh;shutdown=true");
Run Code Online (Sandbox Code Playgroud)
然后:
DriverManager.getConnection("jdbc:derby:eh;shutdown=true");
Run Code Online (Sandbox Code Playgroud)
前者导致异常但不是预期的异常.细节是:
java.sql.SQLNonTransientConnectionException:数据库'内存:呃'关闭.
后者导致
java.sql.SQLException:找不到数据库'呃'.
根据我能够弄清楚的,我们想要一个SQLException但不是我们收到的那个.另一方面,SQLNonTransientConnectionException错误似乎更合适,但不是正确的类型(虽然它是派生的SQLException),也没有正确的状态代码.州代码最终是:08006.
我的示例代码说明了SQLException一个SQL状态为"XJ015"的代码.
注意:我引用的示例是:WwdEmbedded Program(Java Code).
我对内存表的理解是将在内存中创建的表,并且尽可能少地使用磁盘(如果有的话)。我假设我有足够的 RAM 来容纳该表,或者至少是大部分。我不想使用显式函数将表(如 pg_prewarm)加载到内存中,我只想在发出 aCREATE TABLE或时默认情况下表就在那里CREATE TABLE AS select statement,除非内存已满或除非我另有说明。我并不特别关心记录到磁盘。
7年前,有人在这里问过类似的问题PostgreSQL相当于MySQL内存表吗?。它已收到 2 个答复,其中一个有点晚了(4 年后)。
一个答案是创建一个 RAM 磁盘并为其添加一个表空间。或者使用 UNLOGGED 表。或者等待全局临时表。然而,我没有特殊的硬件,我只有普通的 RAM - 所以我不知道如何去做。我可以使用 UNLOGGED 功能,但据我了解,仍然涉及相当多的磁盘交互(这是我试图减少的),并且我不确定表是否会默认加载到内存中。此外,我不明白全局临时空间是如何相关的。我对它们的理解是它们只是可以共享的空间中的桌子。
另一个答案建议使用内存列存储引擎。然后使用函数将所有内容加载到内存中。我对这种方法的问题是,所提到的引擎看起来很旧并且没有维护,我找不到任何其他引擎。另外,我希望我不必明确地诉诸使用“加载到内存”功能,而是默认情况下一切都会发生。
我只是想知道 7 年后如何在 Postgres 12 中获取内存表。
我正在使用新的 EF 7ExecuteDelete和ExecuteUpdate功能,它们非常棒。但是当我尝试为使用它们的函数编写单元测试时,这些测试崩溃了。
我在 .NET Core 7、7.0.1Microsoft.EntityFrameWorkCore.InMemory和 Xunit 2.4.2上使用 EF 7.0.1
[Fact]
public async Task DeleteAccountAsync__Success()
{
var accountId = Guid.Parse("52ff9d4e-efb9-4b51-b5e7-1734d10187f7");
// CRASH
_context.Accounts
.Where(p => p.AccountId == accountId)
.ExecuteDelete();
}
private void SeedDataBase()
{
var a1 = new Account
{
AccountId = Guid.Parse("52ff9d4e-efb9-4b51-b5e7-1734d10187f7"),
};
var a2 = new Account
{
AccountId = Guid.Parse("d5c38300-0de6-4118-8d01-6bc94842d4b5"),
};
_context.Accounts.AddRange(a1, a2);
_context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
消息“无法翻译 LINQ 表达式 'DbSet()\n .Where(a => a.AccountId == __accountId_0)\n .ExecuteDelete()'。请以可翻译的形式重写查询,或者切换通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用来显式进行客户端评估。有关详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2101038。
c# in-memory-database entity-framework-core .net-7.0 ef-core-7.0
我正在使用Hazelcast v2.5.我对集群中的分区有一些疑问.
如何识别分区?
当发出m.get请求时,Hazelcast如何识别数据所在的分区?(除了钥匙)
当新成员加入群集时,如何完成分区?
如果输入了分区ID,我可以在分区中获取条目吗?
我想知道我是否可以在内存缓存(redis,memcached),内存数据网格(gemfire)和内存数据库(VoltDB)之间的差异得到解释.我很难区分3之间的关键特征.
我有一个测试装置,我在其中初始化了我的 SQLite 内存 dbcontext,如下所示:
public static MYAPPDBContext Create()
{
var options = new DbContextOptionsBuilder<MYAPPDBContext>()
.UseSqlite("DataSource=:memory:")
.Options;
var context = new MYAPPDBContext(options);
context.Database.OpenConnection(); // this is where exception is thrown
context.Database.EnsureCreated();
return context;
}
Run Code Online (Sandbox Code Playgroud)
当我调用 Create() 方法时,我得到以下 NullReferenceException:
System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=Microsoft.Data.Sqlite
StackTrace:
at Microsoft.Data.Sqlite.SqliteConnection.Open()
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.Open(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.<>c.<OpenConnection>b__15_0(DatabaseFacade database)
at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, Func`2 operation, Func`2 verifySucceeded, TState state)
at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, TState state, Func`2 …Run Code Online (Sandbox Code Playgroud) 有许多独立且不那么独立的研究比较传统的RDBMS,但我没有设法在内存数据库中找到任何好的材料.我主要对OLTP专门感兴趣.
到目前为止,我设法在TimesTen和MySQL Cluster上找到了通用白皮书,但我还没有看到一场比较.还有其他替代方案(例如来自IBM),但是更容易获得的材料.
根据Redis 基准测试,Redis可以执行100'000 SET操作/秒和80'000 GET操作.Redis是一个内存数据库,这看起来很令人惊讶,因为通常人们会期望内存写入比读取慢一些,例如考虑到SET需要在能够写入值之前分配内存.
有人可以解释为什么SET比GET更快?
描述:
RocksDB 是一个键值存储,因此我们可以简单地序列化对象列表并存储与键对应的值。如果列表中的数据足够小,这将是可以的。
但是如果列表很大并且大小不断增加,那么我们需要对数据进行分页。因此,在这种情况下,存储与单个键对应的整个序列化列表数据不是一个好主意;因为会存在性能问题,因为每次将新数据插入列表时,这个非常大的值也需要在读取期间读取和更新,当向用户显示列表时,将检索整个值,而只有一部分是用户需要。
例如:假设我们想将用户下的订单存储在 RocksDB 中。然后我们可以在 RockDB “u:1:li:o” 中以下列方式存储这个订单数据:Serialised([O1{}, O2{},....On{}])。但是如果用户下的订单数以千计,我们想以页面的形式检索订单(一次 10 或 20 条记录)。因此,在同一个键中存储数千个订单并从该键中检索整个数据然后提供所需的 10-20 条记录并不是一个好主意。此外,用户向同一键添加新订单将影响上述性能。
所以我正在努力设计模式以在 RocksDB 中有效地存储和检索如此大的列表。
如果您能就架构设计提出您的建议,那将会很棒且非常有帮助。
database-design in-memory-database memory-optimized-tables rocksdb
c# ×2
database ×2
in-memory ×2
java ×2
redis ×2
sqlite ×2
.net-7.0 ×1
asp.net-core ×1
benchmarking ×1
c ×1
c++ ×1
caching ×1
comparison ×1
derby ×1
ef-core-7.0 ×1
hazelcast ×1
memcached ×1
partitioning ×1
postgresql ×1
rdbms ×1
rocksdb ×1
shutdown ×1
voltdb ×1
xunit ×1