1
oldgun OP 有人愿意看一下吗?
|
2
keakon 2011-03-25 22:56:24 +08:00
可以试试generator
http://www.python.org/dev/peps/pep-0289/ from datetime import date def number_generator(type_number): last_day = date.today() number = 0 while True: today = date.today() if last_day == today: number += 1 else: last_day = today number = 1 yield '%s%s%03d' % (type_number, today.strftime('%Y%m%d'), number) generator = number_generator('01') print generator.next() print generator.next() print generator.next() print generator.next() 结果: 0120110325001 0120110325002 0120110325003 0120110325004 |
3
oldgun OP @keakon 谢谢!
不过忘了关键点了,补充一下,在分布式和并发环境下如何保证编号的连续及唯一呢?想过利用数据库的sequence 但最好不要。用锁吗? |
5
oldgun OP @keakon 因为想用sqlite或Berkeleydb,数据库层面实现很基本无望。oracle的sequence应该可以,不过高并发下恐怕效率会很低。初步想建一个带锁机制的服务来解决了。
|
6
summic 2011-03-25 23:33:11 +08:00
唯一性的问题,存数据库,然后实现一个乐观锁就行了
|
9
napoleonu 2011-03-25 23:53:29 +08:00
编号为什么一定要连续呢?
|
11
napoleonu 2011-03-26 00:22:03 +08:00
@oldgun 是要最终连续还是要按照写数据的时间循序连续?我觉的问题描述不清楚,分布式的单点会不会一直增加?要不要考虑单点故障?
|
13
Kymair 2011-03-26 12:53:03 +08:00 via Android
可以考虑下Redis
自增和自减是原子的 经常被拿来做id generator |