【发布时间】:2010-02-23 20:56:31
【问题描述】:
有大量可用的键值对存储。目前你需要选择一个并坚持下去。我相信一个独立的开放 API,不是由键值存储供应商制作的,将使存储之间的切换变得更加容易。
因此,我正在构建一个数据存储抽象层(如 ODBC,但专注于更简单的键值存储),以便有人构建一次应用程序,并在必要时更改键值存储。这个 API 是不是太简单了?
get(Key)
set(Key, Value)
exists(Key)
delete(Key)
到目前为止,我看到的所有 API 似乎都增加了很多,我想知道需要多少额外的方法?
我收到一些回复说 set(null) 可以用来删除一个项目,如果 get 返回 null 那么这意味着一个项目不存在。这很糟糕,有两个原因。首先,混合返回类型和状态不是很好,其次,不是所有的语言都有 null 的概念。见:
Do all programming languages have a clear concept of NIL, null, or undefined?
我确实希望能够对数据执行多种类型的操作,但据我了解,一切都可以建立在键值存储之上。它是否正确?我也应该提供这些增值功能吗?例如:像 mapreduce 或索引
在内部,我们已经在 Erlang 和 Ruby 中有一个基本版本,它为我们节省了大量时间,还使我们能够测试不同键值存储的特定用例的性能
【问题讨论】:
-
简单是件好事 :)
-
简单明了的 API 每天都胜过复杂的大量文档。
-
是的,太简单了。没有程序员愿意使用它,因为它不会提供任何工作保障。
-
如果您按照我们的回答继续编辑 API,那么 API 当然永远不会太简单。 :-)
-
@Zubair:我的建议是,不要创建这个抽象层。只需使用您仔细选择的现有优质产品。根据我的经验,您在此处应用的“抽象层”通常会由于 API 不完整而令人沮丧,并且它理论上提供的“我可以轻松切换”选项实际上从未发生过,并且无论如何都会破坏事情。最重要的是,如果您真的想切换,那么只需完成并更改呼叫就不会那么难。