标签: in-memory-database

查看H2或HSQLDB内存数据库的内容

有没有办法浏览H2或HSQLDB内存数据库的内容以供查看?例如,在与Hibernate的调试会话期间,为了检查执行刷新的时间; 或者确保实例化DB的脚本给出了预期的结果.

是否存在可以嵌入代码的插件或库,以便允许这样做?

如果你有一个特定于其中一个的答案,请提及你正在谈论的那个(H2或HSQLDB).

h2 hsqldb in-memory-database

83
推荐指数
3
解决办法
10万
查看次数

在django中,如何从初始化脚本中调用子命令"syncdb"?

我是python和django的新手,在关注Django Book时,我了解了命令'python manage.py syncdb',它为我生成了数据库表.在开发环境中,我在内存数据库中使用sqlite,因此每次重新启动服务器时都会自动删除它.那么我如何编写这个'syncdb'命令的脚本?(这应该在'settings.py'文件中完成吗?)

澄清

OP正在使用内存数据库,需要在使用针对该数据库定义的Django模型的任何进程开始时对其进行初始化.确保数据库初始化的最佳方法是什么(每个进程启动一次).这可以通过manage.py runserver或通过Web服务器进程(例如使用WSGI或mod_python)运行测试或运行服务器.

python django django-syncdb in-memory-database

46
推荐指数
3
解决办法
2万
查看次数

Haskell中关系数据的安全建模

我发现想要在我的功能程序中建模关系数据是很常见的.例如,在开发网站时,我可能希望使用以下数据结构来存储有关我的用户的信息:

data User = User 
  { name :: String
  , birthDate :: Date
  }
Run Code Online (Sandbox Code Playgroud)

接下来,我想存储有关用户在我的网站上发布的消息的数据:

data Message = Message
  { user :: User
  , timestamp :: Date
  , content :: String
  }
Run Code Online (Sandbox Code Playgroud)

此数据结构存在多个问题:

  • 我们无法区分具有相似姓名和出生日期的用户.
  • 用户数据将在序列化/反序列化时重复
  • 比较用户需要比较他们的数据,这可能是昂贵的操作.
  • 对字段的更新User是脆弱的 - 您可能忘记更新User数据结构中的所有事件.

这些问题是可管理的,而我们的数据可以表示为树.例如,您可以像这样重构:

data User = User
  { name :: String
  , birthDate :: Date
  , messages :: [(String, Date)] -- you get the idea
  }
Run Code Online (Sandbox Code Playgroud)

但是,可以将数据整形为DAG(想象任何多对多关系),甚至可以作为一般图形(好的,也许不是).在这种情况下,我倾向于通过在Maps中存储我的数据来模拟关系数据库:

newtype Id a = Id Integer
type Table a = …
Run Code Online (Sandbox Code Playgroud)

haskell relational-database type-safety in-memory-database

37
推荐指数
4
解决办法
3647
查看次数

Angular-in-memory-web-api中的多个集合

我们如何使用Angular-in-memory-web-api创建多个集合?单个集合不是问题.但是我无法为多个集合实现它.

例如,我想在内存db - Country和Cities中创建两个集合.任何想法,怎么做?

api in-memory-database angular

37
推荐指数
2
解决办法
1万
查看次数

为什么Spark SQL认为索引的支持不重要?

引用Spark DataFrames,Datasets和SQL手册:

Spark中还没有包含少数Hive优化.由于Spark SQL的内存计算模型,其中一些(如索引)不太重要.其他版本用于将来的Spark SQL版本.

作为Spark的新手,我有点困惑,原因有两个:

  1. Spark SQL旨在处理大数据,至少在我的用例中,数据大小远远超过可用内存的大小.假设这并不罕见,"Spark SQL的内存计算模型"是什么意思?Spark SQL是否仅适用于数据适合内存的情况?

  2. 即使假设数据适合内存,对非常大的数据集进行全扫描也需要很长时间.我在内存数据库中读取了这个反对索引的论点,但我并不相信.那里的例子讨论了一个10,000,000记录表的扫描,但这不是真正的大数据.扫描具有数十亿条记录的表可能导致"SELECT x WHERE y = z"类型的简单查询永远不会立即返回.

我理解索引有诸如较慢的INSERT/UPDATE,空间要求等缺点.但在我的用例中,我首先处理并将大批数据加载到Spark SQL中,然后将这些数据作为一个整体进行探索,而无需进一步修改.Spark SQL对于初始分布式处理和数据加载很有用,但缺乏索引使得交互式探索比我预期的更慢,更麻烦.

我想知道为什么Spark SQL团队认为索引不重要到它的路线图之外的程度.是否有不同的使用模式可以提供索引的好处,而无需独立实现等效的东西?

sql bigdata in-memory-database apache-spark apache-spark-sql

35
推荐指数
2
解决办法
1万
查看次数

从Oracle实例创建内存数据库结构

我有一个应用程序,其中许多"单元"测试在执行期间使用与Oracle数据库的真实连接.

可以想象,这些测试需要花费太多时间来执行,因为它们需要初始化一些Spring上下文,并与Oracle实例进行通信.除此之外,我们还必须管理复杂的机制,例如事务,以避免在测试执行后修改数据库(即使我们使用Spring中的有用类AbstractAnnotationAwareTransactionalTests).

所以我的想法是逐步用内存数据库替换这个Oracle测试实例.我会用hsqldb或者更好h2.

我的问题是要知道这样做的最佳方法是什么.我主要关心的是构建内存数据库结构和插入参考数据.

当然,我可以使用像SQL Developeror 这样的工具从Oracle中提取数据库结构TOAD,然后修改这些脚本以使它们适应hsqldbh2使用它们.但我不认为这是更好的方法.


事实上,我已经在另一个项目上使用了hsqldb,但是我已经手动编写了所有脚本来创建表.幸运的是,我只创建了几张桌子.我在此步骤中的主要问题是将用于创建表的Oracle脚本"转换"为该hsqldb语言.

例如,使用以下sql命令在Oracle中创建的表:

CREATE TABLE FOOBAR (
    SOME_ID NUMBER,
    SOME_DATE DATE, -- Add primary key constraint
    SOME_STATUS NUMBER,
    SOME_FLAG NUMBER(1) DEFAULT 0 NOT NULL);
Run Code Online (Sandbox Code Playgroud)

需要"翻译"为hsqldb:

CREATE TABLE FOOBAR (
    SOME_ID NUMERIC,
    SOME_DATE TIMESTAMP PRIMARY KEY,
    SOME_STATUS NUMERIC,
    SOME_FLAG INTEGER DEFAULT 0 NOT NULL);
Run Code Online (Sandbox Code Playgroud)

在我当前的项目中,有太多表要手动执行...


所以我的问题:

  • 您可以给我什么建议来实现这一目标?
  • 是否h2还是hsqldb提供了一些工具来生成一个Oracle连接的脚本?

技术信息 …

java unit-testing h2 hsqldb in-memory-database

32
推荐指数
2
解决办法
2万
查看次数

Mongo DB是否具有内存模式?

可能重复:
运行集成测试时嵌入式MongoDB

我想使用In-Memory模式进行单元测试,是否存在像RavenDB这样的In-Memory模式?

mongodb in-memory-database ravendb

28
推荐指数
1
解决办法
2万
查看次数

如何根据XUnit测试隔离EF InMemory数据库

我正在尝试使用InMemory EF7数据库进行我的xunit存储库测试.

但我的问题是,当我尝试Dispose创建的上下文时,内存db仍然存在.这意味着一个测试涉及其他.

我已阅读这篇文章单元测试实体框架7与内存中的数据存储和我试图安装在我的TestClass的构造背景.但这种方法不起作用.当我单独运行测试时一切正常,但我的第一个测试方法是在DB中添加一些东西,第二个测试方法从之前的测试方法开始使用脏DB.我尝试添加IDispose到测试类,但方法DatabaseContext和DB在内存中持久存在.我错了什么我错了什么?

我的代码看起来像:

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Xunit;

namespace Fabric.Tests.Repositories
{
    /// <summary>
    /// Test for TaskRepository 
    /// </summary>
    public class TaskRepositoryTests:IDisposable
    {

        private readonly DatabaseContext contextMemory;

        /// <summary>
        /// Constructor
        /// </summary>
        public TaskRepositoryTests()
        {
            var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
            optionsBuilder.UseInMemoryDatabase();
            contextMemory = new DatabaseContext(optionsBuilder.Options);

        }

        /// <summary>
        /// Dispose DB 
        /// </summary>
        public void Dispose()
        {
            //this has no effect 
            if (contextMemory != null)
            { …
Run Code Online (Sandbox Code Playgroud)

.net c# in-memory-database entity-framework-core .net-core

27
推荐指数
2
解决办法
7207
查看次数

我应该何时考虑使用内存数据库以及需要注意的问题?

我只是认为现在通常在数据库服务器上有足够的RAM来缓存你的完整数据库为什么内存数据库中的专家 (例如TimesTen,另见维基百科页面)几年前风靡一时不被使用更多?

似乎随着时间的推移,没有更少的基于磁盘的数据库被使用,例如,现在大多数应用程序都建立在传统的理性数据库上.我原本期望相反,因为RAM已经接近很多服务器的免费.

我问这个问题,因为我刚刚阅读了堆栈溢出架构,页面上写道

这很重要,因为Stack Overflow的数据库几乎完全在RAM中,并且连接的成本仍然太高.

但是,如果使用"指针"和"集合"而不是普通的btree,我认为这不会是一个问题.Btree非常聪明地限制磁盘访问速度,例如它们交换CPU使用以减少磁盘使用.但是我们现在有匹配ram.

但我们仍然需要数据库,就像做自己的一样

  • 锁定
  • 死锁检测
  • 交易记录
  • 恢复
  • 等等

很难.

@ S.Lott,鉴于我们都花了这么长时间选择索引,避免加入和调查数据库性能问题.肯定有更好的办法.几年前,我们被告知"内存数据库"是更好的方法.所以在我开始使用其他之前,我想知道为什么其他人不再使用它们.

(我不太可能自己使用TimesTen,因为价格很高(41,500.00美元/处理器)而且我不喜欢和Oracle销售人员交谈 - 我宁愿花时间编写代码.)

也可以看看:

更新:

我问这个问题一个的时间以前,这几天的Microsoft SQL Server具有" 在内存OLTP ",也就是集成到SQL Server引擎内存优化的数据库引擎.它并不便宜,但对某些工作负载来说似乎非常快.

database memory-management transactions in-memory-database

26
推荐指数
3
解决办法
5721
查看次数

在C#中,有没有办法将内存中的文件作为内存中的SQLite数据库与System.Data.SQLite链接?

我想做的是以下几点:

using System.Data.SQLite;
using System.IO;

//My SQLite connection
SQLiteConnection myCon;

public void ReadAndOpenDB(string filename)
{
    FileStream fstrm = new FileStream(filename, FileMode.Open);
    byte[] buf = new byte[fstrm.Length];
    fstrm.Read(buf, 0, (int)fstrm.Length);
    MemoryStream mstrm = new MemoryStream(buf);

    //Do some things with the memory stream

    myCon = new SQLiteConnection(/*attach to my memory stream for reading*/);
    myCon.Open();

    //Do necessary DB operations
}
Run Code Online (Sandbox Code Playgroud)

我不打算写入内存数据库,但我需要能够在连接到程序之前在程序的内存中对文件做一些事情.

c# sqlite connection system.data.sqlite in-memory-database

26
推荐指数
1
解决办法
2035
查看次数