我在android中有一个应用程序,服务器上有一个数据库,我在django中编写了api。我希望我的应用程序能够在线和离线工作。到目前为止,我在android中做了本地数据库,api在json中返回查询结果。 (数据库非常简单,只有一个包含7个字段的表)。但我对数据库性能一无所知。我想知道一个好的策略是从表(从服务器)获取所有行,从本地数据库中删除所有行,并将所有新行保存到本地数据库?或者更新现有行中的所有字段?或者也许在线/离线应用不是一个好主意?从服务器上的数据库下载1000行需要多长时间? 也许这是一个愚蠢的问题,但实际上,我正在寻找解决方案;)
我在Django的模型看起来像那样:
class Quote(models.Model):
user = models.ForeignKey(User)
quote = models.TextField(verbose_name="Quotation")
accepted = models.BooleanField(default=False, verbose_name="Accepted")
deleted = models.BooleanField(default=False, verbose_name="Deleted")
date = models.DateTimeField(verbose_name="Date", auto_now=True)
good = models.PositiveIntegerField(default=0, verbose_name="Rate good")
bad = models.PositiveIntegerField(default=0, verbose_name="Rate bad")
class Favourite(models.Model):
user = models.ForeignKey(User)
quote = models.ForeignKey(Quote)
我只通过json发送表格(用户名,引用,接受,删除,日期,好,坏)。 api函数:
@csrf_exempt
def api(request):
if request.method == 'POST':
operation = request.POST['operation']
print 'operation', operation
response_data = {}
response_data['result'] = 'FAILED'
if operation == 'getFive':
itemsList = []
ID = int(request.POST['id'])
if ID == -1:
querySet = Quote.objects.filter(deleted=False).order_by('-id')[:5]
else:
querySet = Quote.objects.filter(id__lt=ID, deleted=False).order_by('-id')[:5]
maxID = Quote.objects.filter(deleted=False).order_by('-id')[0].id
minID = Quote.objects.filter(deleted=False).order_by('id')[0].id
for item in querySet:
tmp = {}
tmp['id'] = item.id
tmp['username'] = item.user.username
tmp['quote'] = item.quote
tmp['accepted'] = item.accepted
tmp['deleted'] = item.deleted
tmp['date'] = dateformat.format(item.date, "Y-m-d H:i:s")
tmp['good'] = item.good
tmp['bad'] = item.bad
itemsList.append(tmp)
print item.id, item.quote
response_data['result'] = 'SUCCESS'
response_data['items'] = itemsList
response_data['maxID'] = maxID
response_data['minID'] = minID
response_data['items'] = itemsList
return HttpResponse(json.dumps(response_data), content_type="application/json")
return redirect("/")
我的问题是我不想让用户等待很长时间来运行应用程序,而且我不知道智能手机可以通过HSDPA / 3G / LTE等下载多长时间。表中有~1000行。假设一行有大约1500个字符。如果我计算好了它的1500 B * 1000行= 1500000字节= 1464 KB = ~1,42 MB ...所以我认为它很多,但我不是专家。
我忘了添加,当行'已删除'= True时,我不会将其发送给智能手机。
再次提出我的问题:每次应用启动时,从服务器发送到Android应用的所有行都是个好主意?
谢谢,对不起我的英语;)。
答案 0 :(得分:0)
我可以为你解释一个解决方案,但我无法真正告诉你如何做到这一点。