`
san_yun
  • 浏览: 2653781 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

生成稳定的递增id

 
阅读更多

最近有个项目数据库设计中需要用到分表, 假设记录文章的表,主键用一个id来标识文章的id。 由于各个表中的id不能重复,所以需要用一个外部的id生产程序。当然我们可以在数据库中单独新建一个表,利用表的自增属性来 生成这个id,但是这样子不够灵活。所以另外用python写了个生成id的程序。

      其中需要注意两点,

      1.要保证线程安全,所以变量递增的时候,必须添加锁。

      2.要保证该生成id的进程在被断电或意外强制结束(kill -9)后,下次重新启动的时候,再能从进程崩溃前的id继续递增,而不至于产生 以前产生过的id,就是说要保证内存中的数据实时的同步到硬盘。 第二点,python提供的anydbm模块或gdbm模块,其中打开文件的时候,有个s模式,即实时同步模式,能保证内存中的数据实时的同步到硬盘中。

 即使进程被被kill -9,数据也不会丢失。

分享到:
评论

相关推荐

    细聊分布式ID生成方法.pdf

    分布式ID生成是构建稳定可靠的分布式系统的基础之一。通过对不同场景需求的分析,我们可以选择适合的ID生成策略。无论是基于时间戳排序还是利用数据库特性,亦或是采用高级算法如雪花算法,都应该根据具体的应用场景...

    分布式id生成详解.pdf

    3. 可用性:在高并发场景下,系统仍能稳定地生成ID,保证服务的连续性。 4. 自主性:在分布式环境中,各个节点无需依赖中心节点就能生成ID。 5. 安全性:ID应隐藏任何可能泄露系统或业务敏感信息的细节。 分布式ID...

    分布式系统中唯一ID的生成方法共3页.pdf.zip

    一种常见的唯一ID生成方法是全局递增序列。这种方法简单直观,但在分布式环境下可能会遇到问题,例如主节点挂掉时无法继续生成ID,或者由于网络延迟导致ID生成顺序不一致。为了解决这些问题,我们可以采用分布式...

    浅谈CAS在分布式ID生成方案上的应用

    这种方案不仅能够有效解决高并发下的ID生成问题,还能保证ID的全局唯一性和连续性,为分布式系统的稳定运行提供了坚实的基础。当然,这种方法也并非完美无缺,例如生成的ID不再是绝对递增的,而是趋势递增的,但这...

    订单号的生成redis中获取

    例如,可以结合当前时间毫秒数、随机数和业务ID(如用户ID)生成一个长整型数值,然后通过Redis的原子递增操作将其转化为唯一的订单号。 总之,这个系统设计利用了Redis的高效性能,确保在高并发环境下也能快速生成...

    快速生成10万条测试数据

    在Oracle中,`CONNECT BY LEVEL` 和 `ROWNUM` 是两个非常有用的工具,它们可以用来生成一系列递增的数据行。通过将这两个工具结合起来,我们可以轻松地生成大量测试数据。 ##### 1. `CONNECT BY LEVEL` 的用法 `...

    分布式ID常见解决方案.docx

    高可用高性能则意味着ID生成服务必须能在高并发场景下稳定运行,避免成为系统的瓶颈。 业界常见的分布式ID生成方案有以下几种: 1. UUID方案:UUID(Universally Unique Identifier)通过算法生成一组36个字符的...

    短链接生成网源码.zip

    常见的短链接生成方法有哈希算法和递增ID编码。哈希算法能将任意长度的长链接映射为固定长度的短链接,但可能产生冲突;递增ID编码则是将每个新链接对应一个不断增长的数字,再通过某种编码方式(如Base62)转换成...

    idgen:ID生成器

    7. **测试与可靠性**:为了保证 ID 生成器的稳定性,需要进行充分的单元测试、集成测试以及压力测试。 通过研究 `idgen-master` 的源代码,我们可以深入了解如何在 Kotlin 中实现一个高效的 ID 生成器,以及如何...

    chapter-disributed-id.zip

    综上所述,"chapter-disributed-id.zip"的内容将有助于我们掌握微服务架构下的分布式ID生成技术,这对于构建高效、稳定的分布式系统至关重要。通过学习和实践,我们可以提升系统的可靠性和可扩展性。

    Hibernate的主键生成策略

    - **定义:**increment策略由Hibernate负责生成递增的主键值,基于内存实现。 - **用途:**适用于单进程的应用场景,不适合多进程或集群环境。 **配置示例:** ```xml <id name="id" column="id"> </id> ``` **...

    解决sqlserver 2012 重启服务ID自动增长1000的问题

    SQL Server中的自增ID通常由`IDENTITY`属性定义的列来实现,它确保每次插入新行时,该列的值都会递增。当数据库服务重启时,如果数据库处于非正常关闭状态,系统可能无法正确记住上次分配的ID。为避免重复值,SQL ...

    网络游戏-网络中的识别码生成方法及识别码生成程序.zip

    4. **自增序列**:在数据库中设置一个自增字段,每次新生成一个识别码时自动递增,适用于用户注册场景,但不适用于并发高的环境。 5. **结合业务规则**:根据特定的业务逻辑,如用户行为、地理位置等信息,生成具有...

    Go-shorturl-短链接生成算法

    为了避免哈希冲突,另一种常见方法是使用递增ID,并通过Base62(或Base36)编码转换为可读的短字符串。Base62是数字0-9和字母A-Z、a-z组成的62个字符集,可以表示更大的数值范围,同时保持短链接的可读性。 4. **...

    Hibernate主键生成策略.docx

    选择合适的主键生成策略对于保证系统的稳定性和性能至关重要。在实际项目中,应根据项目的具体需求和技术栈来选择最合适的策略。例如,在需要跨数据库使用且对性能要求较高的场景下,可以选择 Hilo 或 Seqhilo 策略...

    数据库主键生成资料资源

    4. 雪花算法:一种分布式ID生成策略,如Twitter的Snowflake算法,结合时间戳、工作节点ID和序列号,生成具有足够大的取值范围且有序的ID,适用于大规模分布式系统。 5. 用户自定义:允许用户输入特定值,但这需要...

    网络游戏-网络ID的自动指配.zip

    1. **顺序分配**:系统按照预设的顺序分配ID,例如从最小值开始逐个递增。但这种方法可能因ID耗尽而面临问题,尤其是在大型在线游戏中。 2. **随机分配**:系统随机生成一个ID,然后检查是否已被使用。如果已被占用...

    全局自增ID设计方案

    1. **ID结构**:生成64位的ID,分为三个部分:41位的时间戳(精确到毫秒级别),10位的机器标识符(支持1024个节点),12位的序列号(支持每个节点每毫秒生成4096个ID)。 2. **优点**:Snowflake具有高性能、低...

Global site tag (gtag.js) - Google Analytics