这是存储网站地址和网页网址的最佳主键?
为了避免使用自动增量id(它与数据没有真正联系),我设计了使用URL的SHA1签名作为主键的模式.
这种方法在很多方面都很有用:例如,我不需要从数据库中读取last_id,因此我可以准备计算密钥的所有表更新,并在单个事务中进行真正的更新.没有约束违规.
无论如何,我读了两本书,告诉我我错了.在"高性能MySQL"中,据说随机密钥对DB优化器不利.此外,在Joe Celko的每本书中,他都说主键应该是数据的一部分.
问题是:URL的自然键是...... URL本身.事实是,如果一个站点很短(www.something.com),那么am URL没有强制限制(参见http://www.boutell.com/newfaq/misc/urllength.html).
考虑一下我必须存储(并使用)数百万个.
那么哪个是最好的钥匙?自动增量ID,网址,网址哈希?
我知道这个话题已经讨论过多次 次在这里StackOverflow上,但我在寻找一个更好的答案.
虽然我很欣赏的差异,我是不是真的能找到一个明确的解释,为什么在re
在Python模块同时提供match()
和search()
.search()
如果我^
在单线模式下,/A
在多线模式下,我不能得到相同的行为吗?我错过了什么吗?
我试图理解查看_sre.c代码的实现,我理解search(sre_search()
)实际上是实现了在要搜索的字符串中移动指针,并sre_match()
在其上应用,直到找到匹配.
所以我想使用re.match()
可能会比使用相应的正则表达式(使用^
或者/A
)略快一些re.search()
.这是什么原因?
我也研究了python-dev ML档案,但无济于事.
>>> string="""first line
... second line"""
>>> print re.match('first', string, re.MULTILINE)
<_sre.SRE_Match object at 0x1072ae7e8>
>>> print re.match('second', string, re.MULTILINE)
None
>>> print re.search('\Afirst', string, re.MULTILINE)
<_sre.SRE_Match object at 0x1072ae7e8>
>>> print re.search('\Asecond', string, re.MULTILINE)
None
Run Code Online (Sandbox Code Playgroud)