- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Pyramid 为 Web 服务开发 REST API和 Cornice ;服务器端的数据使用 SQLAlchemy 处理和 MySQL .网络服务器是 nginx使用 uwsgi ,并且它被配置为运行多个 Python 进程:
[uwsgi]
socket = localhost:6542
plugins = python34
...
processes = 2 # spawn the specified number of workers/processes
threads = 2 # run each worker in prethreaded mode with the specified number of threads
customers
在服务器端。使用 API 可以读取、修改或删除客户数据。除此之外,还有其他读取客户数据的 API 函数。
# Write/modify the customer {id} data
curl --request POST ... https://some.host/api/customer/{id}
# Delete customer {id} and all of its associated data
curl --request DELETE https://some.host/api/customer/{id}
# Perform some function which reads customer {id}
curl --request GET ... https://some.host/api/do-work
{id}
没有意义如locked
因为 SQLAlchemy 缓存了这样的修改,并且 flush()
在这种情况下似乎不够原子? 最佳答案
我假设您正在处理一个 MySQL 数据库,并且您的锁不需要覆盖其他资源(Redis、第三方 API 等)。我还假设您的客户端函数本身不需要处理事务数据(通过多个 API 调用保持 session ),您只是想防止并发 API 访问弄乱您的数据库。
锁有两种,悲观锁和乐观锁。
悲观锁定是大多数人通常通过锁定所知道的 - 您可以预先在代码中以编程方式创建和获取锁。这就是分布式锁管理器。
乐观锁定是您可以轻松摆脱 SQL 数据库的原因。如果两个事务从同一资源竞争,数据库有效地注定了其中一个事务和应用程序框架(在本例中为 Pyramid + pyramid_tm)可以在放弃之前重试事务 N 次。
从开发的角度来看,乐观锁定是更理想的解决方案,因为它不会给应用程序开发人员带来任何认知负担,以记住正确锁定资源或创建内部锁定机制。相反,开发人员依靠框架和数据库来重试和管理并发情况。然而,乐观锁定在 web 开发人员中并不为人所知,因为在广泛的 PHP 式环境中进行乐观锁定是很困难的,因为编程语言缺乏灵 active 。pyramid_tm
实现乐观锁定解决方案,我建议您使用它或其他一些乐观锁定解决方案,除非您知道您不想使用的非常具体的原因。
pyramid_tm
将事务生命周期与 HTTP 请求联系起来,从 Web 开发人员的角度来看非常自然 pyramid_tm
可以将其他事件与成功的交易联系起来,例如pyramid_mailer
仅当事务提交 pyramid_tm
经过良好测试并基于 ZODB transaction
事务管理器,自 2000 年初以来一直在生产中使用 request.dbsession
instead . 关于synchronization - Pyramid REST API : How do I handle concurrent data access safely?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33934771/
我是一名优秀的程序员,十分优秀!