2023-07-05 09:00:10 32阅读
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'ce',
'USER': 'root',
'PASSWORD': '',
'HOST': '192.168.96.95',
'PORT': '3306',
}
}
class Test(models.Model):
url = models.CharField(max_length=228, blank=True, null=True)
img_url = models.CharField(max_length=228, blank=True, null=True)
title = models.CharField(max_length=228, blank=True, null=True)
content = models.CharField(max_length=228, blank=True, null=True)
class Meta:
db_table = 'test'
verbose_name = "test表"
def __unicode__(self):
return self.id
class Test(APIView):
def post(self, requsts):
Test.objects.create(
**{'url': str(1000000 * time.time())})
return Response({"status": 200})
MySQL [ce]> select id from test order by id desc limit 2;
+--------+
| id |
+--------+
| 627775 |
| 627774 |
+--------+
Transactions: 28231 hits
Availability: 95.67 %
Elapsed time: 30.71 secs
Data transferred: 0.41 MB
Response time: 0.27 secs
Transaction rate: 919.28 trans/sec # 提高了不少吧,能不能在提高?
Throughput: 0.01 MB/sec
Concurrency: 251.06
Successful transactions: 28231
Failed transactions: 1278 # 但是失败的有些多
Longest transaction: 8.06
Shortest transaction: 0.01
这里我不建议使用,这样的话你的数据库连接数会飚的很高,服务会挂的很惨, 毕竟数据库是不会允许
无休止的建立连接的。前边的提高手段无非用的多线程,如果一定要用协程(gevent)的方式呢,能不
能解决数据库连接数过高的问题,而且还能有不错的性能呢?可以看一下这篇文章:
gunicorn+gevent+django解决mysql高连接数问题
原因很简单,因为自增主键的存在写库存在抢锁, 可以利用全局id生成器提前生成id直接写入数据库
如果数据只是存在mysql中做备份,建议使用异步的方式写入库,先把数据写到缓存下发给用户,之后在
利用后台异步任务一点点的写入,例如聊天系统可以这样干
可以试试tornado, 如果tornado依然无法满足,可以尝试使用golango,毕竟golang是以高并发著称,
而且是编译语言,而且基于它的web框架也很容易上手,性能很可观,例如Gin
2023-07-05 09:00:10 32阅读
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'ce',
'USER': 'root',
'PASSWORD': '',
'HOST': '192.168.96.95',
'PORT': '3306',
}
}
class Test(models.Model):
url = models.CharField(max_length=228, blank=True, null=True)
img_url = models.CharField(max_length=228, blank=True, null=True)
title = models.CharField(max_length=228, blank=True, null=True)
content = models.CharField(max_length=228, blank=True, null=True)
class Meta:
db_table = 'test'
verbose_name = "test表"
def __unicode__(self):
return self.id
class Test(APIView):
def post(self, requsts):
Test.objects.create(
**{'url': str(1000000 * time.time())})
return Response({"status": 200})
MySQL [ce]> select id from test order by id desc limit 2;
+--------+
| id |
+--------+
| 627775 |
| 627774 |
+--------+
Transactions: 28231 hits
Availability: 95.67 %
Elapsed time: 30.71 secs
Data transferred: 0.41 MB
Response time: 0.27 secs
Transaction rate: 919.28 trans/sec # 提高了不少吧,能不能在提高?
Throughput: 0.01 MB/sec
Concurrency: 251.06
Successful transactions: 28231
Failed transactions: 1278 # 但是失败的有些多
Longest transaction: 8.06
Shortest transaction: 0.01
这里我不建议使用,这样的话你的数据库连接数会飚的很高,服务会挂的很惨, 毕竟数据库是不会允许
无休止的建立连接的。前边的提高手段无非用的多线程,如果一定要用协程(gevent)的方式呢,能不
能解决数据库连接数过高的问题,而且还能有不错的性能呢?可以看一下这篇文章:
gunicorn+gevent+django解决mysql高连接数问题
原因很简单,因为自增主键的存在写库存在抢锁, 可以利用全局id生成器提前生成id直接写入数据库
如果数据只是存在mysql中做备份,建议使用异步的方式写入库,先把数据写到缓存下发给用户,之后在
利用后台异步任务一点点的写入,例如聊天系统可以这样干
可以试试tornado, 如果tornado依然无法满足,可以尝试使用golango,毕竟golang是以高并发著称,
而且是编译语言,而且基于它的web框架也很容易上手,性能很可观,例如Gin