問題タブ [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.
nhibernate - ジェネレータークラス NHibernate
ジェネレーター クラスassigned
を使用して主キーの値を割り当てています。私はそれがより良いと述べているいくつかのブログを読みhilo
ました. assigned
以上にメリットはありhilo
ますか?
java - Hi-Lo Id ジェネレーターの改善
マルチスレッド環境で使用するhi-lo Idジェネレーターがあります。ジェネレーターは、スレッドごとに毎秒 10 万回まで呼び出すことができます
私は、うまく機能するかなり良い(そして安全な)実装を持っています。IdAllocator は、ID の次の「バッチ」をフェッチするオブジェクトです。これはスレッドセーフであると想定できます。また、batchSize をかなり高く設定しました (100 万)
現時点では、常にではありませんが、ほとんどの場合、これを競合のない方法で使用しています。ただし、将来的には複数のスレッドから呼び出されるようになります。
スレッドごとにこれの 1 つのインスタンスをインスタンス化することを検討しましたが、これがおそらく最良の方法です。ただし、知的/学習経験として、特に複数のスレッドが頻繁に呼び出しているときに getNextId() の潜在的な競合を減らすために、この実装を改善できるのではないかと思いましたか?
c# - NHibernateおよびOracleでのhilo(またはseqhilo)の実装
Oracle 11gに6つのテーブルを持つデータベース(変更できません)があります。すべてのテーブルにはID用のOID人工列があり、そのタイプはRAW(16)です。DBAは、IDが6つのテーブルすべてで一意になるため、整数ではなく生であると回答しました。これを保証する必要があります。
私はC#でUIを開発しており、データレイヤーにはNHibernateを使用しようとしています。この必需品に対応する方法でIDジェネレーターを実装するにはどうすればよいですか?
どうもありがとう、
ペドロ・デュッソ
私の地図は:
そして私のクラスコードは次のとおりです。
Jobオブジェクトを作成していて、データベースに保存しようとしています。試してみるキャッチ
完全な例外は次のとおりです。
{System.InvalidCastException:パラメーター値をGuidからByte[]に変換できませんでした。---> System.InvalidCastException:オブジェクトはIConvertibleを実装する必要があります。System.Convert.ChangeType(オブジェクト値、タイプconversionType、IFormatProviderプロバイダー)at System.Data.OracleClient.OracleParameter.CoerceValue(オブジェクト値、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の動作、ブール値のneedRowid、
そして、私はあなたの最初の疑わしいことを心から理解していません。データベースには、JOBテーブルとETL_PROCESSテーブルがあります。それらの関係は1:nのようであり、JOBは多くのetlプロセスを持つことができます。
PS:私はnhibernate構成を追加しています、多分それは助けになります。
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)at NHibernate.Driver.OracleDataClientDriver ..2 settings)
--- End of inner exception stack trace ---
at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary
2つの設定)NHibernate.Connection.ConnectionProvider.Configure(IDictionary2 settings)
at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary
2つの設定)NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary`2プロパティ)でNHibernate.Cfg.Configuration.BuildSettings()でNHibernate.Cfg.Configuration.BuildSessionFactory()でMetaManager.Data.SessionProvider.get_Session()でC: \ Users \ Pedro_Dusso \ document \ visual studio 2010 \ Projects \ MetaManager \ MetaManager.Data \ SessionProvider.cs:line 27 at MetaManager.Data.AttributeDataService.get_Session()in C:\ Users \ Pedro_Dusso \ document \ visual studio 2010 \ Projects \ MetaManager \ MetaManager.Data \ Services \ AttributeDataService.cs:C:\ Users \ Pedro_Dusso \ document \ visual studio 2010 \ Projects \ MetaManager \ MetaManager.Data \ ServicesのMetaManager.Data.AttributeDataService.Save(属性属性)の33行目CのDebug.Program.Main(String [] args)の\ AttributeDataService.cs:line 58:\ Users \ Pedro_Dusso \ document \ visual studio 2010 \ Projects \ MetaManager \ Debug \ Program.cs:line 24 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly、String [] args)at System.AppDomain.ExecuteAssembly(String assemblyFile、Evidence assemblySecurity 、String [] args)at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()at System.Threading.ThreadHelper.ThreadStart_Context(Object state)at System.Threading.ExecutionContext.Run(ExecutionContext executeContext、ContextCallback callback、Object state、Boolean ignoreSyncCtx )at System.Threading.ExecutionContext.Run(ExecutionContext executeContext、ContextCallback callback、Object state)at System.Threading.ThreadHelper.ThreadStart()}System.AppDomain.ExecuteAssembly(String assemblyFile、Evidence assemblySecurity、String [] args)at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()at System.Threading.ThreadHelper.ThreadStart_Context(Object state)atSystem。 System.Threading.ExecutionContext.Run(ExecutionContext executeContext、ContextCallback callback、Object state)at System.Threading.ThreadHelper.ThreadStart()}のThreading.ExecutionContext.Run(ExecutionContext executeContext、ContextCallback callback、Object state、Boolean ignoreSyncCtx)System.AppDomain.ExecuteAssembly(String assemblyFile、Evidence assemblySecurity、String [] args)at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()at System.Threading.ThreadHelper.ThreadStart_Context(Object state)atSystem。 System.Threading.ExecutionContext.Run(ExecutionContext executeContext、ContextCallback callback、Object state)at System.Threading.ThreadHelper.ThreadStart()}のThreading.ExecutionContext.Run(ExecutionContext executeContext、ContextCallback callback、Object state、Boolean ignoreSyncCtx)System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallbackコールバック、オブジェクト状態)でSystem.Threading.ThreadHelper.ThreadStart()}でRun(ExecutionContext executeContext、ContextCallbackコールバック、オブジェクト状態、ブール値ignoreSyncCtx)System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallbackコールバック、オブジェクト状態)でSystem.Threading.ThreadHelper.ThreadStart()}でRun(ExecutionContext executeContext、ContextCallbackコールバック、オブジェクト状態、ブール値ignoreSyncCtx)
再度、感謝します、
nhibernate - Hibernate HiLo 限り
70 億行を超えるテーブルを作成するので、主キーに long が必要です。int の代わりに In64 を使用するように HiLo を指定する方法は?
ありがとう
nhibernate - NHibernate HiLo ジェネレーターのすべてのパラメーターは何ですか?
次のパラメーターを示す Fabio Maulo のドキュメントを見てきました。
ただし、この質問では、投稿者は<param name="schema">...
HiLo ジェネレーターのスキーマを指定できるようにしたいと考えています。
ジェネレーターのすべてのパラメーターに関する明確なドキュメントはありますか? 私は成功せずにグーグルで試しました。
nhibernate - Hibernate 挿入エラー
SQLite で動作していたのと同じマッピングとソース データを使用して Sql Server db をセットアップしましたが、テスト データのバッチを保存しようとすると以下のエラーが発生します。
SQLite がキャッチできないのは hilo の問題だと思いますが、頭を悩ませることはできません。SchemaExport ツールを使用してデータベースを生成しています。これにより、最初は「1」である hibernate_unique_key テーブルが作成されます。エラーの後は「2」です
助言がありますか?
乾杯、
ベリル
java - mysql で休止状態シーケンスを手動で設定するにはどうすればよいですか?
データモデルのリファクタリング後にデータ移行を行っており、複合主キーを持ついくつかのテーブルを取得し、それらをより大きなテーブルに結合して、独自の一意の主キーを与えています。この時点で、古いテーブル データを新しいテーブルにコピーし、AUTO_INCREMENT を使用して主キーを割り当てる SQL を記述しました。移行が完了したら、PK フィールドから AUTO_INCREMENT を削除します。これで問題は解決しましたが、問題は、次に利用可能な PK が何であるかを知るために休止状態シーケンスが必要なことです。私たちは通常、すべてのエンティティに TABLE 戦略を使用していますが、一貫性を保ち、将来のオブジェクトに AUTO_INCREMENT と IDENTITY 戦略を使用しないようにしたいと考えています。生成された「hibernate_sequences」でそれぞれの行を一時的に設定することで逃げました table を新しく作成されたテーブルの最大 ID に変更しますが、これは問題に対する一時的な修正にすぎません。また、これにより、次に作成される ID が最大 ID よりもはるかに大きくなります。これは、HiLo の ID 割り当てメカニズムを理解していないためだと確信しています。そのため、ここに投稿しています。Idが連続するようにこれを設定する方法はありますか? または、HiLo 値を生成して連続した ID を確保するために必要な値を計算できるコードはどこにありますか?
asp.net-mvc-2 - NHibernate HiLo-id が不足して負の数になる
HiLo を使用してエンティティの ID を生成する ASP.NET データベース アプリケーションを実行しています。このアプリケーションに加えて、同じデータベースを使用するいくつかの Web サイトがあります。私たちが見ているのは、ID が不足していて、ID 列が負の数になっていることです。
これはジェネレーターと関係があると思われます。複数の Web サイトが同じコードベースとデータベース上で実行されているため、おそらく HiLo アルゴリズムはすぐに bigint 範囲外の ID を生成し始めます (もちろん、すぐに相対的になります)。
必要に応じて値を率直に増やすのではなく、ID シーケンスのギャップ (かなりの数があります) も使用するようにジェネレーターを構成することは可能ですか?
それは解決策になるでしょうか?それとも、まったく別のことをすべきでしょうか?
nhibernate - nHibernate HiLo から GUID に切り替える
HiLo から GUID.comb に切り替えることは可能ですか? 私が知る限り、後者は HiLo の利点、つまり、新しい Id を取得するために DB を呼び出す必要がなく、クライアント側で ID を管理できるという利点と、ID が不足しないという利点を兼ね備えています。
現在、HiLo が生成する Id が大きすぎるため、Int32 (これは Int64 である必要がありますが、これは私の前任者の WTF のようなものです) では十分な大きさではないという問題に直面しています。Int64 に変更することはできますが、これは問題がすぐにではなく後で発生することを意味します。
Id は意味のあるものである必要がないため、GUID への切り替えは理にかなっているようです。しかし、私はそのような切り替えを試みたことがないので、そのようなことがもたらす可能性のある影響を評価するのに誰か助けてくれるかどうか疑問に思っていました.
nhibernate - NHibernate Hi/Lo-IDのギャップ
シナリオ:Hi/LoはLo100で初期化されMyEntity
ます
テーブルは空です。
接続が異なる2つのセッションで、両方とも3つのアイテムが挿入されました。
TableIds
3つ目が後で入って、3つのアイテムを挿入した場合:
TableIds
これらのギャップを回避する方法はありますか?