- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们正在使用 couchbase 构建一个项目。在 Android 上,我使用 couchbase lite。通常,我一直在使用关系数据库,因为我是 couchbase 的新手,所以我很难找到“正确”的架构。我确实理解我认为的核心概念,但所有示例和指南似乎都遵循某种简单的设置,它们可以在 Activity 中直接访问数据库。
我更习惯于拥有一些数据库抽象,其中业务逻辑只能看到通过数据库接口(interface)或某些 DAO 或其他东西交付的 POJO DTO。所以我现在已经注释了我的模型类并开始编写一个简单的 OR 映射器,但是使用不同类型的数据、外键等。这非常耗时。
我是不是完全忽略了这里的要点?我无法想象每个人都这样做?我每个人都分别为每个类编写将文档转换为 POJO 模型类的方法吗?或使用 json 解析器来执行此操作(但如果我不想加载外键,这对外键不起作用,是吗)?
很抱歉提出了这么多问题,但我觉得我在这里遗漏了一些明显的东西。谢谢!
最佳答案
将尝试回答您的问题:
Am I completely missing the point here somehow?
没有。您可以将 noSQL CB 视为持久分布式对象缓存。所以它不是 RDBMS。然而,DAO 模式非常适合这个模型……因为您在 DAO 级别和 noSQL 级别处理 DTO/ValueObjects/POJO。
I can't imagine everyone doing it this way?
我建议编写一个可以持久化/检索 POJO 的通用 Couchbase 管理器类。然后您可以在您的 DAO 中重新使用它。
Everyone writing methods that convert Documents to POJO model classes for each class separately? Or using a json parser to do that (But that won't work for foreign keys if I wan't to load them too, does it)?
您可以在 Couchbase 管理器类中使用一个通用代码来执行从 json 到 POJO 的转换。因此,您只使用 POJO,并且在您的应用程序代码中看不到任何 json(在 Couchbase 管理器类之外)这是此类的示例:
public class CouchbaseManager<K, V>
{
private final Class<V> valueTypeParameterClass;
@Inject
private CouchbaseClient cbClient;
@Inject
private Gson gson;
public CouchbaseManager(final Class<V> valueClass)
{
this.valueTypeParameterClass = valueClass;
}
public V get(K key)
{
V res = null;
String jsonValue = null;
if (key != null)
{
jsonValue = (String) cbClient.get(key);
if (jsonValue != null)
{
res = gson.fromJson(jsonValue, valueTypeParameterClass);
}
}
return res;
}
public void put(K key, V value)
{
int ttl = 0;
cbClient.set(key, ttl, gson.toJson(value, valueTypeParameterClass));
}
}
然后在您的 DAO 代码中为每种类型创建 CouchbaseManager 实例:
CouchbaseManager<String,Customer> cbmCustomer = new CouchbaseManager<String,Customer>(Customer.class);
CouchbaseManager<String,Account> cbmAccount = new CouchbaseManager<String,Account>(Account.class);
// and so on for other POJOs you have.
// then get/put operations look simple
Customer cust = cbmCustomer.get("cust-1234");
cust.setName("New Name"); // mutate value
// store changes
cbmCustomer.put(cust.getId(), cust);
现在关于“外键”。请记住它不是 RDBMS,因此您的代码是否具有“外键”的概念。例如,客户类可以有一个帐户的 ID:
Customer cust = cbmCustomer.get("cust-1234");
String accId = cust.getAccountId();
//You can load account
Account acc = cbmAccount.get(accId);
正如您所看到的,这一切都是您自己完成的。我希望它是 JPA或 JDO Couchbase 的实现/提供者(如 DataNucleus 或 Hibernate )
您真的应该从您的 POJO/文档设计开始,尝试将您的 POJO 实体拆分为数据“ block ”,以便在粗粒度 POJO 和细粒度 POJO 之间取得适当的平衡。另见 this discussion on key/document design considerations .
关于android - Android 上的 Couchbase lite - 通用架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25898023/
我有看起来像这样的文件: { "name": "n", "age": 22 //other properties "hash": "XyRZHDJJD6738..." //This property
有下一个对象 "a" : { "id" : "1", "arr" : [ {"id" : "b1"}, {"id" : "b2"} ] } "b1" : { "id" : "b
Couchbase 文档说“磁盘持久性使您能够执行备份和恢复操作,并使您能够将数据集增长到比内置缓存层更大的数据集”,但我似乎无法让它发挥作用。 我正在一个三节点集群上测试 Couchbase 2.5
我搜索了有关 Couchbase 如何在集群内实现强一致性的解释。这一切都是因为使用了membase吗? 最佳答案 顺便说一句,Couchbase 是 membase。 Couchbase 是一个产品
我有以下格式存储的 couchbase 文档: { "userEmail": "satyam@xyz.com", "hashedPassword": "$2a$12$MT31FHNEbOAKpQGzL
请在下方找到有关 Couchbase 产品路线图的问题。 上下文 我目前正在研究一项将现有系统(后端应用程序和移动应用程序)转变为 Multi-Tenancy 应用程序的功能。 堆栈将是: 沙发底座
什么是 Couchbase,什么是 Couchbase Lite?两者之间有什么区别吗?如何在移动设备中创建 couchbase lite 以及如何与服务器通信? 最佳答案 你碰巧知道CouchDB
我正在寻找一种使用 Spring Data Couchbase 连接到两个单独的 Couchbase 集群的方法。查看文档和实现,不清楚如何执行此操作,我担心如果有两个扩展 AbstractCouch
我想使用 couchbase lite 和 couchbase syncgetway 在 nodejs 中开发一个 CRUD 应用程序。我想在 Raspberry-pi 上运行这个 Node js 应
我在 couchbase 存储桶中有具有这种结构的文件: "name": { "grandfather": { "parent1": { "ch
我有一个依赖于另一个的文件。第一的: { "doctype": "closed_auctions", "seller": { "person": "person11304" },
我以前使用过 couchdb 并且非常喜欢它的 UI,因为我可以直接在 UI 中创建 View 并测试它们并查看文档。 因为,我需要扩展,所以我开始使用 couchbase。但是,在安装 couchb
我的环境中有一个二级索引(没有复制),我想知道如何在不删除索引的情况下创建复制? 我不想删除索引并用副本重新创建它,因为我没有使用主索引,因此有约束。 谢谢 最佳答案 即将发布的 6.50 版本您可以
我正在考虑将 couchbase 用于我的下一个 Web 应用程序,我想知道我的数据应该如何构建,特别是存储桶的使用。例如,假设每个用户将拥有大量唯一数据,是否应该为每个用户创建一个单独的存储桶(甚至
我正在开发一个小型 express 应用程序,目前允许用户登录(通过护照)并查看有关他们 friend 的信息,即购买历史记录、喜欢等。理想情况下,我希望每个用户都有一个随附的个人资料照片和他们购买的
对于 Cassandra,假设复制因子为 1(即数据集的两个副本),至少需要三个节点才能启用具有强一致性的写入。 Couchbase 似乎没有这个要求,至少我没有在任何地方找到它。尽管如此,Couch
我正在使用 Couchbase 存储桶,其中所有文档都使用 DocType 保存。标识包含什么类型的数据的属性。我想执行一个查询,从每个 DocType 给我一个结果, 用作所有文档类型的示例。 我可
无法更改 Couchbase 控制台的端口号。默认为 8091。我试图在已知的 static_config 文件中附加一行。这条线就像- {rest_port, 9000}. 这是我缺少文件的屏幕。
我想使用 Couchbase,但我想在一些类似于 RethinkDB 的方式实现更改跟踪。 似乎有很多方法可以将更改从 Couchbase 服务器推送给我。 DCP 点击 XDCR 哪一个是正确的选择
我有一个 couchbase 文档,id 为 x x 没有子文档,因为在一些子文档操作中都被删除了,它是这样的 {} 我想删除所有没有子文档的空文档。是否可以在 couchbase 中使用 N1QL
我是一名优秀的程序员,十分优秀!