我正在使用hash_ring包在服务器之间分配对象.我假设分布是统一的,因为它基于MD5哈希.不幸的是情况并非如此.
我正在使用使用生成的随机密钥uuid.uuid4().我已经证实,MD5本身实际上确实提供了均匀分布.然而,当我使用时hash_ring.HashRing,大多数和最少人口的桶之间存在20-30%的差异.
hash_ring通过调整一些设置可以改善分布的均匀性吗? 我用来测试分布均匀性的代码:
ring = hash_ring.HashRing(range(8))
for _ in range(10):
counters = [0]*8
for _ in range(100000):
counters[ring.get_node(str(uuid.uuid4()))] += 1
print counters
Run Code Online (Sandbox Code Playgroud)
打印出来的:
[11115, 11853, 14033, 11505, 13640, 12292, 12851, 12711]
[11164, 11833, 14024, 11562, 13365, 12302, 13002, 12748]
[11354, 11756, 14017, 11583, 13201, 12231, 13135, 12723]
[11182, 11672, 13936, 11441, 13563, 12240, 13129, 12837]
[11069, 11866, 14045, 11541, 13443, 12249, 12894, 12893]
[11196, 11791, 14158, 11533, 13517, 12319, 13039, …Run Code Online (Sandbox Code Playgroud) PEP 249——Python 数据库 API 规范 v2.0在.commit()的描述中指出:
请注意,如果数据库支持自动提交功能,则必须首先关闭该功能。可以提供接口方法来将其重新打开。
鉴于大多数数据库默认为自动提交,其背后的理由是什么?
我尝试在DynamoDB中使用UUID的整数表示作为整数哈希键,但是因为错误而失败了:
DynamoDBValidationError: DynamoDBValidationError: 400 Bad Request
{'message': 'Attempting to store more than 38 significant digits in a Number',
'__type': 'com.amazon.coral.validate#ValidationException'}
Run Code Online (Sandbox Code Playgroud)
这一方面有意义,因为UUID是128位,最多可以是39位十进制数字.另一方面它让我想知道......
DynamoDB是否存储整数散列键,因为它是十进制表示?使用整数散列键比字符串散列键有什么优势吗?
我正在寻找基于动态语言(Python,Ruby,Groovy和Lua)比较Web框架的真实基准.如果将它们与基于PHP,Java,ASP.NET的经典解决方案进行比较甚至更好,甚至可能是Perl.我特别感兴趣的是:
编辑:至于肖恩的回答:
让我引用D. Brown,CM Davis和S. Stanlick的书"Struts2 in Action":
内部框架不太可能看到跟上行业步伐的优雅修订.实际上,随着时间的推移,内部框架似乎对建筑侵蚀感到怀疑,太多的扩展不如人们希望的那样优雅.
我完全同意.
您对XHTML和XML中的重音和特殊字符的编码有何看法?
请详细说明哪个以及为什么.
(注意:我是Python的新手)
我在函数调用中输入了一个拼写错误,并且在使用拼写错误进行函数调用时,在运行时崩溃了.
这是正常的吗?!构建不应该失败吗?!我设置正确吗?!
我在Linux Centos上使用Eclipse.
Eclipse确实检测到其他错误(缩进,未定义的变量(即,如果foo:,foo之前从未声明过导致构建错误,等等)
这是我的东西看起来像:
def foo(self):
pass
def bar(self):
foe()
Run Code Online (Sandbox Code Playgroud)
- > foe而不是foo- >不会生成编译错误,但(当然)在运行时崩溃
我可以理解Python在运行时有时不知道变量的类型,但是当我调用一个甚至不存在于类中的函数时,它无法检测到它!
我希望我的设置有问题,否则,我恐怕会错过Java,C和我所有其他静态类型的语言;))))
我目前正在尝试将以下格式的日期YYYYmmddHHMMSS转换为unix时间戳,但是我收到错误(ValueError:year超出范围).
import datetime
def ts(date):
return datetime.datetime.fromtimestamp(date).strftime('%Y%m%d%H%M%S')
if __name__ == "__main__":
date = 20130814100000
print ts(date)
Run Code Online (Sandbox Code Playgroud)