2012-07-24 73 views
1

简介:让我先介绍一下我的android应用程序。 它是一个食品评论应用程序,让用户对餐厅的特定食物进行评论。Android应用程序+ MySQL数据库结构和设计

应用程序流程: 1.用户启动应用程序。 2.附近的餐馆列表弹出。 3.用户选择一家餐馆。 4.显示所选餐厅的菜单列表。 5.用户选择他/她希望评论/查看评级的食物。

目前为止进展情况:我使用Google Place API获取附近餐馆的列表。但是API不提供餐厅的食物(菜单)的可搜索列表。

问题:菜单和餐厅都需要与菜肴评论一起存储在数据库中。如果我为餐厅的餐厅和其他餐桌制作一张桌子,那么搜索和检索时间将变得非常巨大。

需要:你能告诉我应该如何设计我的数据库,以便检索时间少于微秒。我是否需要使用一些第三方应用程序在尽可能最短的时间内检索记录?

请尽快回复。

回答

0

Android应用程序不使用MySQL - 开销将是压倒性的。如果他们使用SQL,他们就会使用SQLite。

有关可通过内置API访问的数据存储选项的更多信息,请参阅http://developer.android.com/guide/topics/data/data-storage.html

+0

但所有关于餐馆和菜单的数据都必须存储在MySQL中。我认为在SQLite中存储不是一种选择。 – 2012-07-24 16:06:44

+0

@ChanchalKumari MySQL提供给SQLite无法完成的Android应用程序的内容是什么? – tylerl 2012-07-24 17:39:12

1

首先,我不会直接从您的应用程序连接到数据库。应用程序可以被破解,并且用户可以在数据库上免费统治。我会构建一个您的应用将与之交互的RESTful服务。然后,可以通过组合缓存层和数据库持久层来恢复该RESTful服务。

就DB持久层的设计而言。我个人可能会选择采用NoSQL方法,以便您可以简单地检索每个餐厅的对象,然后访问该餐厅的菜单数据,因为如果需要的话,这可以让您为每个餐厅获得不同的数据结构。

但是,如果您认为每家餐厅的菜单结构都可以正常化,以便可以使用关系数据库,则可以随意使用该方法。即使您在多个表中查询,设计良好的数据库模式也应该能够满足您的需求。特别是如果您在数据库前面使用数据缓存(memcached或类似的)。

事实上,就获得最佳总体响应时间而言,内存缓存将成为您最大的资产。

+0

这将是最好的选择:1.从MySQL中检索数据并将其添加到手机的sqlite数据库中。或者如上所述将数据存储在缓存中。 – 2012-07-25 07:07:54

+0

我认为如果你想在sqlite中将数据缓存在手机上,那么这也是一个好方法,因为那时你的响应时间不会受到你的互联网连接质量的影响。但是,如果数据不存在于你的本地sqlite缓存中,你可以通过你的API(而不是直接从MySQL获得) – 2012-07-25 14:56:46