4

对不起,我的英语不是我的母语。

我想开发具有此基本功能的应用程序:

  1. 用户可以创建带有子任务的任务。层次结构的级别应该是无限的,因此子任务可以有自己的子任务等等。
  2. 用户可以创建标签,每个任务可以有无限级别的标签,因此用户可以查看所有已被某些标签标记的任务。
  3. 任务应与云同步。
  4. 它应该工作得很快。因此,例如,用户在转换下一级任务或显示具有不同标签的项目时不会遇到任何滞后。

好吧,还有很多其他功能,比如提醒和东西,但它与这种裸 JSON、nosql db 或 sqlite 的选择无关。

问题是什么更适合这个功能?

例如 :

  1. 在 sql 中,我们必须将子任务的 ID 存储在模式中的某个位置,并对 n 级层次结构进行 O(n) 查询,但在 json 中相当容易。我们可以有一个包含任务数组的任务对象,这是它的子任务。或者在 xml 中(我不知道这是否可以在 JSON 中完成)我们可能只是有一些子任务 ID 的数组)。我应该怎么选,你怎么看?
  2. 在 JSON 中,我可以有称为“标签”的字符串项目。每个任务都可以有一系列标签,非常简单。在 sql 中,我必须有另一个表“标签”,其中包含所有标签和所有任务 ID,每个唯一的标签和 ID 对都有一个,这有点多余。
  3. 使用 JSON 可以轻松与云同步。我可以只拥有一个包含所有任务的大文件,并将其从服务器上传或上传到服务器,具体取决于最新更改的位置(嗯,基本上)。但是有两个问题。但是这样我会传输所有文件,而更改很少,这样应用程序应该会消耗更多流量。也许 noSQL DB 可以解决这个问题?在 sql 中,app 也可以这样做,但它必须传输所有 db 数据。
4

4 回答 4

1

Couchbase Lite 是适用于 iOS 和 Android 的嵌入式原生 NoSQL 数据库。它存储 JSON 文档并通过您的云服务器透明地将它们同步到其他设备,其安全模型专为多用户交互式应用程序中的细粒度访问控制而设计。

Github 仓库在这里:

邮件列表:https ://groups.google.com/forum/#!forum/mobile-couchbase

于 2013-08-15T16:25:31.097 回答
0

这里有一些想法——

couchDB 被认为是一种很好的键值存储类型,用于跨多个服务器/客户端进行复制。对于您所描述的问题,这可能是一种合适的数据库类型。

否则,在您的场景中使用任何类型的带有 REST 访问点的 SQL/noSQL 样式数据库都可以。我认为 MongoDB 是一个特别好的选择,因为尽管它是键/值存储,但对于来自 SQL 单词的人来说,它可以快速学习——它还会以 json 形式返回你的查询的答案——所以如果你使用像 NodeJS 这样的东西作为你的 REST 服务器它可以简化一些事情。

至于您的应用程序的一般结构 - 请查看http://developer.asana.com/documentation/上的 asana 文档- 它应该为您提供一个很好的起点。

于 2013-08-15T08:30:41.693 回答
0

由于这还没有被提出,SnappyDB有一个非常简单的 API,并且是一个用于 android 的 NoSQL 数据库。它可以持久化任何对象(网站说)。它是这样使用的

try {
    DB snappydb = DBFactory.open(context); //create or open an existing databse using the default name

    snappydb.put("name", "Jack Reacher"); 
    snappydb.putInt("age", 42);  
    snappydb.putBoolean("single", true);
    snappydb.put("books", new String[]{"One Shot", "Tripwire", "61 Hours"}); 

    String   name   =  snappydb.get("name");
    int        age    =  snappydb.getInt("age");
    boolean  single =  snappydb.getBoolean("single");
    String[] books  =  snappydb.getArray("books", String.class);// get array of string

    snappydb.close();

    } catch (SnappydbException e) {
}

存储一个可序列化的对象:

AtomicInteger objAtomicInt = new AtomicInteger (42);
snappyDB.put("atomic integer", objAtomicInt);
AtomicInteger myObject = snappyDB.get("atomic integer", AtomicInteger.class);

存储任何对象:

MyPojo pojo = new MyPojo ();
snappyDB.put("my_pojo", pojo);
MyPojo myObject = snappyDB.getObject("non_serializable", MyPojo.class);
于 2015-08-27T09:58:31.810 回答
0

ThingDB 是一个带有 MongoDB-Like API 的嵌入式 NoSQL 数据库:

DB db = new DB("./db");
Doc doc=new Doc();
doc.put("name","test");
doc.put("age",31);
db.insert(doc);
//later you can find the saved doc:
Doc d=db.findOne(eq("name","test"));

您还可以将 Doc 转换为 org.json.JSONObject:

JSONObject jo=d.toJSONObject();

https://github.com/neo-expert/thingdb

于 2018-04-13T20:54:35.940 回答