问题标签 [hilo]

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 回答
989 浏览

nhibernate - 生成器类 NHibernate

我一直在使用生成器类assigned来分配我的主键值。我已经阅读了几个博客,其中说明hilo更好。assigned结束有好处hilo吗?

0 投票
2 回答
809 浏览

java - Hi-Lo Id生成器的改进

我有一个在多线程环境中使用的 hi-lo Id 生成器。每个线程每秒最多可以调用 100k 次生成器

我有一个相当好的(和安全的)实现,效果很好。IdAllocator 是获取下一批“id”的对象。您可以假设这是线程安全的。我还将 batchSize 设置得很高(100 万)

目前,我主要(但并非总是)以无争议的方式使用它。但是将来它将被多个线程调用。

我考虑过为每个线程实例化一个实例,这可能是最好的方法。然而,作为一种智力/学习经验,我想知道我是否可以改进这个实现,特别是在多个线程频繁调用它时减少 getNextId() 中的潜在争用?

0 投票
1 回答
1474 浏览

c# - 在 NHibernate 和 Oracle 中实现 hilo(或 seqhilo)

我在 Oracle 11g 中有一个包含 6 个表的数据库(我无法修改)。所有的表都有一个 OID 人工列作为 ID,它的类型是 RAW(16)。DBA 回答我说它们是原始的而不是整数,因为这样 ID 在所有六个表中都是唯一的——我们必须保证这一点。

我正在用 C# 开发 UI,而对于数据层,我正在(尝试)使用 NHibernate。如何以一种满足这种需求的方式实现 ID 生成器?

非常感谢,

佩德罗·杜索

我的地图是:

我的课程代码是:

我正在创建一个 Job 对象,他们试图将它保存在数据库中。尝试的收获

完整的例外是:

{System.InvalidCastException:无法将参数值从 Guid 转换为 Byte[]。---> System.InvalidCastException:对象必须实现 IConvertible。在 System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at System.Data.OracleClient.OracleParameter.CoerceValue(Object value, MetaType destinationType) --- 内部异常堆栈跟踪结束 --- 在 System.Data。 OracleClient.OracleParameter.CoerceValue(Object value, MetaType destinationType) at System.Data.OracleClient.OracleParameter.SetCoercedValueInternal(Object value, MetaType metaType) at System.Data.OracleClient.OracleParameterBinding.PrepareForBind(OracleConnection connection, Int32& offset) at System.Data .OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior 行为, Boolean needRowid,

老实说,我不明白你的第一个可疑之处。在数据库中,我有一个 JOB 表和一个 ETL_PROCESS 表。他们的关系就像1:n,一个JOB可以有很多个etl进程。

PS.:我正在添加我的休眠配置,也许它有帮助。

使用 ODP 时出错:{NHibernate.HibernateException:无法从 NHibernate.Driver.OracleDataClientDriver 创建驱动程序。---> System.Reflection.TargetInvocationException:调用的目标已抛出异常。---> NHibernate.HibernateException:找不到程序集 Oracle.DataAccess 中的 IDbCommand 和 IDbConnection 实现。确保程序集 Oracle.DataAccess 位于应用程序目录或全局程序集缓存中。如果程序集在 GAC 中,请使用应用程序配置文件中的元素来指定程序集的全名。在 NHibernate.Driver.ReflectionBasedDriver..ctor(String driverAssemblyName, String connectionTypeName, String commandTypeName) 在 NHibernate.Driver.OracleDataClientDriver..2 settings) --- End of inner exception stack trace --- at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary2 设置)在 NHibernate.Connection.ConnectionProvider.Configure(IDictionary2 settings) at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary2 设置)在 NHibernate.Cfg.Configuration.BuildSettings() 在 NHibernate.Cfg.Configuration.BuildSessionFactory() 在 MetaManager.Data.SessionProvider.get_Session() 在 C 中的 NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary`2 属性): \Users\Pedro_Dusso\documents\visual studio 2010\Projects\MetaManager\MetaManager.Data\SessionProvider.cs:第 27 行 MetaManager.Data.AttributeDataService.get_Session() 在 C:\Users\Pedro_Dusso\documents\visual studio 2010\Projects \MetaManager\MetaManager.Data\Services\AttributeDataService.cs:C:\Users\Pedro_Dusso\documents\visual studio 2010\Projects\MetaManager\MetaManager.Data\Services 中 MetaManager.Data.AttributeDataService.Save(属性属性)的第 33 行\AttributeDataService.cs:C 中 Debug.Program.Main(String[] args) 的第 58 行:\Users\Pedro_Dusso\documents\visual studio 2010\Projects\MetaManager\Debug\Program.cs:System.AppDomain._nExecuteAssembly 的第 24 行(RuntimeAssembly 程序集,String[] args)在 System.AppDomain.ExecuteAssembly(字符串 assemblyFile,证据 assemblySecurity , String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx ) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Threading.ThreadHelper.ThreadStart()}String[] args) 在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System。 Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()}String[] args) 在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System。 Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()}Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()}Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()}

再次感谢,

0 投票
1 回答
398 浏览

nhibernate - NHibernate HiLo 只要

我将有一个超过 70 亿行的表,所以我需要很长的主键。如何指定 HiLo 使用 In64 而不是 int?

谢谢

0 投票
2 回答
1601 浏览

nhibernate - NHibernate HiLo 生成器的所有参数是什么?

我看过 Fabio Maulo 的一些文档,其中显示了以下参数:

但是,在这个问题上,张贴者使用了<param name="schema">...我希望能够为 HiLo 生成器指定模式。

是否有所有发电机参数的权威文档?我试过用谷歌搜索它没有成功。

0 投票
1 回答
987 浏览

nhibernate - NHibernate 插入错误

我刚刚使用与 SQLite 相同的映射和源数据设置了一个 Sql Server 数据库,当我尝试保存一批测试数据时出现以下错误。

我怀疑这是 SQLite 没有捕捉到的 hilo 问题,但我无法完全理解它。我正在使用 SchemaExport 工具生成数据库,它创建了一个初始为“1”的 hibernate_unique_key 表。错误后为“2”

有什么建议么?

干杯,
贝里尔

0 投票
2 回答
3455 浏览

java - 如何在 mysql 中手动设置休眠序列?

在一些数据模型重构之后,我正在做一些数据迁移,我正在使用几个带有复合主键的表,并将它们组合成一个更大的表,并赋予它自己唯一的主键。此时,我已经编写了一些 SQL 来将旧表数据复制到新表中,并使用 AUTO_INCREMENT 分配主键。迁移完成后,我从 PK 字段中删除了 AUTO_INCREMENT。所以,现在这都是肉汁,但问题是我需要休眠序列来知道下一个可用的 PK 将是什么。我们通常对所有实体使用 TABLE 策略,我想保持一致并避免对未来的对象使用 AUTO_INCREMENT 和 IDENTITY 策略。我已经暂时在生成的“hibernate_sequences”中设置了相应的行 table 到新创建的表的最大 id,但这只是对问题的临时修复。此外,这会导致创建的下一个 ID 远大于最大 ID。我确定这是因为我不了解 HiLo id-assigning 机制,这就是我在这里发帖的原因。有没有办法设置它,以便 ID 是连续的?或者,生成 HiLo 值的代码在哪里,以便我可以计算它应该是什么以确保顺序 ID?

0 投票
3 回答
898 浏览

asp.net-mvc-2 - 用完 NHibernate HiLo-id 导致负数

我们正在运行一个 ASP.NET 数据库应用程序,它使用 HiLo 为实体生成 id。在这个应用程序之上,我们有几个使用相同数据库的网站。我们看到的是我们用完了 id 并且 ID 列变成了负数。

我们怀疑这与生成器有关。由于多个网站运行在相同的代码库和数据库之上,HiLo 算法可能很快开始生成超出 bigint 范围的 id(当然很快是相对的)。

是否可以配置生成器,使其也使用 Id 序列中的间隙(其中有很多),而不是在认为有必要时直接增加值?

那会是一个解决方案吗?或者我们应该完全做其他事情吗?

0 投票
1 回答
1016 浏览

nhibernate - 从 nHibernate HiLo 切换到 GUID

是否可以从 HiLo 切换到 GUID.comb?据我所知,后者结合了 HiLo 的优势,即在客户端管理 Ids,而不是需要调用 DB 来获取新的 Id,优点是 Ids 不可能用完。

目前,我们遇到了 HiLo 生成 Id 如此之大的问题,以至于 Int32(这应该是 Int64,但这更像是我的前任的 WTF)还不够大。我们可以更改为 Int64,但这只是意味着我们会迟到而不是越早遇到问题。

由于 Id 不需要有意义,因此切换到 GUID 似乎是合乎逻辑的。但是,由于我从未尝试过这样的转换,我想知道这里是否有人可以帮助我评估类似的事情可能产生的影响。

0 投票
2 回答
998 浏览

nhibernate - NHibernate Hi/Lo - id 中的空白

场景:Hi/Lo 初始化为MyEntityLo 100

桌子是空的。

具有不同连接的两个会话都插入了三个项目。

表 ID

如果第三个稍后进来并插入三个项目:

表 ID

有没有办法不让这些差距?