问题标签 [esent]
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.
c++ - 为什么 JetAttachDatabase 返回错误 -550?
堆栈,我需要帮助,JetAttachDatabase 返回错误 -550。JET_paramRecovery 已关闭。我应该怎么做才能开始工作?
我已经尝试恢复实例,但我没有恢复文件...我不知道该怎么办。现在我有这样的代码
c - 当多值列上的 itagSequence = 0 时,什么类型的值返回 JetRetrieveColumns?
我想知道多值列有多少值。MSDN 说“JET_RETRIEVECOLUMN 中的 itagSequence 可以为 0。如果 itagSequence 为 0,则返回多值列的实例数,而不是任何列数据。” (当我们使用 JetRetrieveColumns 函数时)但是要返回的值的数据类型是什么?
检查列是否为多值
检索多值列中的值数量
那么要返回的数据类型是什么?
c++ - 如何在另一个文件夹中使用 JetAPI 恢复 ES 数据库?
请帮帮我!我有一个处于脏关机状态的数据库(Microsoft Exchange)(数据库、日志、检查点文件),我可以使用 JetInit 函数恢复它,但它会影响原始文件。
- 有没有办法在不更改原始文件的情况下使用 JetAPI 在某个新位置恢复此基础,或者如果我对它们具有只读访问权限?
- 如果没有日志文件,是否有办法使基础处于一致状态,但基础处于关闭状态。
windows - ESENT 内部:JetPrereadKeys() 的预期行为
我有一个应用程序处理存储在 ESENT 中的大量数据(100 GB+)。该表的架构是:12 字节JET_bitColumnFixed键和JET_coltypLongBinary值,典型大小约为 2 KiB。页面大小设置为 32 KiB。我不会更改外部 long 值的默认 1024 字节大小阈值,因此我认为这些值主要存储在外部。
我对提高冷缓存查找和检索性能很感兴趣,因为这些操作是分批进行的,并且密钥是预先知道的。据我了解,JetPrereadKeys () API 旨在提高这种情况下的性能,但事实证明,无论有没有这个调用,我都看不到实际行为有任何变化。
更多详情如下:
就我而言,JetPrereadKeys() 总是报告足够数量的预读密钥,等于我在调用 API 时提交的密钥数量。如文档中所述,提交的密钥已适当排序。
我尝试了同步和异步两种方法,其中异步方法是:将预读调用发送到线程池,同时继续在当前线程上查找和检索数据。
通过尝试JET_paramEnableViewCache和JET_paramEnableFileCache参数的所有可用组合,我尝试了 ESENT 的两种可用缓存模式,无论是使用 MMAP 还是专用页面缓存。
除了一个小例外,我无法看到记录的 I/O 操作在有和没有预读的情况下有什么区别。也就是说,我希望此操作会导致(最好是异步)获取 B 树的必要内部节点。但我唯一看到的是从 JetPrereadKeys() 本身的堆栈中偶尔出现的同步小读取。读取的大小很小,从某种意义上说,我认为它不可能预取所有需要的信息。
如果我调试 Windows Search 服务,我可以中断对 JetPrereadKeys() 的各种调用。因此,至少有一个真实世界的示例调用此 API,大概是出于某种原因。
我所有的实验都是在机器重启后进行的,以确保数据库页面缓存为空。
问题:
在所描述的情况下,JetPrereadKeys() 的预期行为是什么?
如果我使用这个 API,我是否应该期望看到不同的 I/O 模式和更好的性能?我应该期望看到数据的同步预读还是异步预读?
是否有另一种方法可以通过以某种方式向 ESENT 暗示即将到来的批次来提高 I/O 性能?
c# - JET/Esent:SeekEQ 找不到多列索引和通配符的匹配项
我有一个带有 2 列主索引的 5 列表。假设索引定义为 ( Col1
, Col2
)。
在以下代码段中,Api.TrySeek返回false,我不知道为什么:
但是,如果我使用SeekGrbit.SeekGE,它会返回true。有人可以解释为什么吗?不适用于通配符列,但可以吗?SeekEQ
SeekGE
在循环中,我仔细检查了所有条目是否都具有Col1 == colVal1
,以排除它只是在 where 找到条目的可能性Col1 > colVal1
。
c# - 如何更新 Microsoft.Isam.Esent.Interop?
我们使用“Microsoft.Isam.Esent.Interop”创建了一些库。在另一台 PC 上运行后,我得到了这个异常:
在我们的 PC 上,我们有两个版本 '10.0.0.0' 和 '6.3.0.0' placet
\Microsoft.NET\assembly\GAC_MSIL\microsoft.isam.esent.interop\v4.0_10.0.0.0__31bf3856ad364e35\Microsoft.Isam.Esent.Interop.dll
和
\Microsoft.NET\assembly\GAC_MSIL\microsoft.isam.esent.interop\v4.0_6.3.0.0__31bf3856ad364e35\Microsoft.Isam.Esent.Interop.dll
但是,生产只有“6.3.0.0”。所以,我有几个问题:
- 如何将“Microsoft.Isam.Esent.Interop.dll”版本从“6.3”更新到“10.0”?
- 我需要用旧版本编译才能工作吗?
- 或者,我如何支持这两个版本?
谢谢你。
esent - 脏关机后如何以编程方式恢复 ESENT 数据库?
当使用 ESENT 数据库的应用程序崩溃时,数据库会被标记为脏,因此下次您尝试打开它时JetAttachDatabase
会返回JET_errDatabaseDirtyShutdown
.
不幸的是,似乎没有像“JetRecoverDatabase”这样的函数或我可以传递给 init 或附加函数以尝试自动恢复的标志。但这JetRestore
需要JetBackup
在应用程序崩溃之前的某个时间点调用。
数据丢失对我的应用程序来说是可以的,但是如果发生崩溃时至少可以恢复一些现有数据,那就太好了(旁注:我的应用程序不会一直崩溃。我目前正在测试各种故障可能发生)。我现在所做的只是删除数据库并重新创建它,但同样,最好恢复一些数据。
关于如何使用 ESENT 的好例子很少,所以它是一个陡峭的学习曲线。我在 GitHub 上为这个特定错误找到的几个代码示例只是说要esentutl.exe
在数据库上运行。虽然我想我可以执行程序来尝试修复它,但我更愿意以编程方式进行。
esent - 停止 ESENT 写入事件查看器
您如何以编程方式告诉 ESENT 不要将事件记录到事件查看器?我注意到,每当我的应用程序使用数据库时,应用程序日志就会充满大量消息(在 1 秒内计数 68 条)。
这里只是我看到的一些例子。
是否可以设置JetSetSystemParameter
或JetInit
标志来限制写入事件查看器的数量?