在mule中生成唯一序列号

时间:2016-02-02 23:00:34

标签: java mule sequence

我的项目有要求。 我想生成一个增加的唯一序列号,它将映射到输出xml文件的特定字段(交换ID)。 客户希望围绕此号码生成一些警报。所以他们非常具体的数字应该是 1.独特2.增加。

所以现在我有两种处理这种情况的方法

  1. 我将在oracle序列的帮助下生成一个序列。但问题是他们又不想不必要地打击数据库。
  2. 借助静态变量在java中生成。但我觉得它不完全证明。我想如果我的应用程序或服务器重新启动,那么静态变量将再次从0开始。在这种情况下,号码不会是唯一的。
  3. 所以我的问题是,如果我们可以在mulesoft中轻松获得这些内容,或者任何想法都是贬值的

    TIA。

3 个答案:

答案 0 :(得分:0)

使用静态字段,但从数据库中获取值。鉴于不要求数字需要连续,您可以将数据库值增加f.e。每次100,那么你只需要每生成一个数字就打到数据库。

答案 1 :(得分:0)

从数据库中获取序列值不符合"不必要地点击数据库 "。

必要,以便以高效且可扩展的方式获取唯一的序列值。

虽然序列争用在Oracle数据库中是闻所未闻的,但它通常不是繁忙数据库中最大的问题。还有一个最容易解决的问题:增加序列缓存

如果您确实知道(而不仅仅是假设) 会出现性能问题,那么可能会考虑增加序列增量到很高的数字。然后,当您启动应用程序时,可以调用nextval并获取可以在Java代码中分发的数字的上限,而不会有任何风险。如果达到该限制,请再次致电nextval以获取下一个数字。基本上将静态变量与Oracle提供的序列持久性相结合

但是又一次:我怀疑调用每个号码的序列会很快让你陷入困境(如果确实如此,你可能会遇到更大的其他性能问题)

答案 2 :(得分:0)

关于为什么最好使用像数据库这样的东西的另一点是因为静态变量只有在你有一个JVM实例时才能工作。

如果您需要扩展更多节点,这将成为一种非常脆弱的模式(除非您能够通过使用GUID来避免 - 但在这种情况下,这不会满足您的递增要求)。

而不是'数据库你可以使用其他有效的机制,如memcache或Redis?