我在 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 应用程序,是个好主意吗?
谢谢,对不起我的英语;)。