问题标签 [extensible-storage-engine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
524 浏览

database - 如何使可扩展存储引擎数据库收缩?- 数据库里面应该没有太多数据吧?

希望 Laurion Burchall 在听 :)

我的数据库有一个 longbinary 字段,用于临时缓存一些数据。这些数据实际上可能不需要很长时间。典型大小范围从 1k 到 3MB

我注意到数据库的大小似乎无限增长,即使在任何时间点,数据库中应该有不到 20 或 30MB 的实际数据。

我正在使用的模式是

我认为数据库往往会在 30MB 左右,但它会变得越来越大(30GB)。我正在做的删除不正确还是我需要以某种方式压缩?

我希望有人能澄清发生了什么,如果我使用 ESE 不正确,等等

0 投票
1 回答
184 浏览

database - JetSetColumns 可以用来替换 JET_coltypLongBinary 值吗?

如果我调用 JetSetColumn() 来替换 JET_coltypLongBinary 值的内容,则操作按我的预期工作 - 值被替换

但是,如果我调用 JetSetColumns(),则不会替换该值 - 而是该值保持在其旧值。奇怪的是,其他列(不是长列)按预期更新。不返回错误。

JET_coltypLongText 也发生了同样的行为——这让我想知道 JetSetColumns() 是否不能用于长值?

尖端?

0 投票
0 回答
194 浏览

windows - 如何在可扩展存储引擎中快速存储大记录

我正在使用可扩展存储引擎来缓存许多大记录 - 这些记录的大小往往约为 2MB(每个)

通常它们会在几个小时内被删除,它们的存活时间很少超过这个时间

我处于 JetBeginTransaction/JetPrepareUpdate/JetSetColums/Update/JetCommitTransaction 的紧密循环中 - 此循环的每次迭代都会写入 2MB 记录。正在写入的数据已预先分配并在 RAM 中 - 我的生产者不应该占用任何 CPU 或磁盘时间

我正在测量非常慢的性能,大约每秒 2 兆字节。

使用 procmon,我看到很多微小的读写(512 字节、4096 字节和大量写入 ~ 30K)。我看到的最大写入是 393,216 字节,我相信这是 JET_paramMaxCoalesceWriteSize 的默认值。

这感觉像是一个调整的事情,我能做些什么来提高大型写入的性能?我与这个硬件应该能够提供的功能相差近两个数量级。

0 投票
1 回答
122 浏览

database - 使用 ESE 设置标有 JET_bitColumnAutoincrement 的值

我在 ESE 中创建了一个列,并将 grbit 设置为 JET_bitColumnAutoincrement - 在正常使用中,这就是我想要的,因为数据库将值设置为唯一的值

但是,我的数据库运行方式很少需要直接设置值 - 我 100% 确定我添加的 ID 尚未使用 - 这是重建类型的操作,不是正常情况

这可能吗?有没有办法既能自动增量又能保持自己设置的能力?

0 投票
1 回答
633 浏览

database - 如何处理 JetUpdate 上的 JET_errVersionStoreOutOfMemory

当我调用 JetUpdate() 时,有时会得到 JET_errVersionStoreOutOfMemory 或 JET_errVersionStoreOutOfMemoryAndCleanupTimedOut。

机器有足够的可用 RAM 和磁盘空间,这个错误是什么意思 - 更重要的是,我该怎么办?

在重试事务之前,我已经尝试过诸如 Sleep()ing 之类的操作,有时这似乎有效,但有时却没有——让我觉得我走错了路?

0 投票
2 回答
203 浏览

database - 如何快速将许多具有一些重复的记录添加到可扩展存储引擎

我需要向 ESE 数据库中添加几百万条数据记录。除其他值外,每条记录都有一个唯一的字符串值。这个值可以被认为是一个键。

记录的有趣之处在于,输入集中可能存在同一记录的多个相同实例。输入后,我只想要一个包含每个唯一字符串的记录。

我的问题是如何做到这一点 - 我怎样才能快速过滤掉重复项?

现在我只在搜索键后添加每条记录,如果条目已经存在,我会跳过它。如果它不在数据库中,我会添加记录和进度。这里最大的成本是对每个条目进行搜索。

关于使这个非常快的任何想法?无论如何要键入该值以使添加重复项会失败?

0 投票
1 回答
153 浏览

database - 在 ESE 中,我可以安全地使用 JET_coltypDateTime 来保存无符号的 64 位值吗?

我在较旧的操作系统上使用 ESE (JET_VERSION = 0x0501)。我需要存储一个无符号的 64 int

我可以安全地将这个 int 转换为 JET_coltyDateTime 或 JET_coltypCurrency 吗?我错过了什么吗,ESE 是否对范围进行任何类型的转换/限制?

请注意,就我的目的而言,排序顺序并不重要,除非它以某种方式破坏了搜索能力

0 投票
2 回答
406 浏览

c# - 存在于 ESENT

我试图找出表中是否存在记录。现在,一种明显的方法是寻求记录:

但是,此操作会将光标设置为找到的记录(成功时),我不想这样做。我想我可以以某种方式快速存储当前记录号,然后将其设置回来,但也许有更好的解决方案?我在 api 中找不到正确的方法。

那么,是否可以执行 Exists,即 Seek 只是为了检查记录是否存在?

顺便说一句,我正在使用 .NET 4.0 和 ESENT 托管接口 1.9.0。

0 投票
1 回答
507 浏览

esent - JetAttachDatabase 返回 -1213

我正在尝试读取一些现有的和未安装的 ESE 数据库文件。我一直在相当成功地玩弄一个 .dat 文件。但是,当我尝试使用等于 32768 的 PageSize 打开现有数据库时,出现错误。

这是我的代码(没有错误处理):

它在返回 -1213 代码的JetAttachDatabase调用中失败。难道我做错了什么?

我正在运行 Windows 7 32 位。

0 投票
2 回答
1145 浏览

c++ - 如何使用 cpp 从 ESE 数据库中读取记录

我已经使用JetOpenDatabase API成功打开了 ESE 数据库。要读取记录,我打开“MSysObjects”表并将当前索引设置为“RootObjects”。

这是我的代码(没有错误处理):

要读取记录,我尝试使用JetRetrieveColumns函数从当前记录中检索多个列值。我也尝试过JetRetrievedColumn函数,但没有得到实际结果。

有人知道如何使用 cpp 从现有和未挂载的 ESE 数据库文件中读取记录吗?