创建键值存储抽象层的任何提示?

时间:2010-02-22 12:03:15

标签: api

随着所有键值数据存储的出现,我开始创建一个抽象层,这样开发人员就不必绑定到特定的商店。我建议为以下人员制作图书馆:

Erlang
Ruby
Java
.NET

有没有人有关于如何设计此API的任何提示?

由于

2 个答案:

答案 0 :(得分:1)

首先,作为随时构建“可插拔”抽象层的一般规则,构建它以支持至少两个真正的实现启动。不要仅为一个数据存储区构建它并尝试将其抽象化,因为您会忽略一些不会很好地插入另一个实现的细节。通过强制它使用两个单独的实现,您将更接近实际上灵活的东西,但您将不得不进行进一步的更改以支持第三和第四个数据存储。

其次,不要打扰,这些东西已经存在。微软已经为他们的技术提供了大量的这些技术(ODBC,ADO,ADO.NET等),我确信Ruby / Java /等也有几个。我理解封装现有技术的愿望,但是您需要支持的数据存储越多,您需要构建的复杂性就越多,您就越接近ADO.NET(或类似技术)。像MS这样的公司花了大量的资金和研究来解决这个问题,这就是他们想出来的。

答案 1 :(得分:1)

我强烈建议查看Twitter的Storehaus项目 - 这是JVM的键值存储抽象层,用Scala编写,支持(迄今为止)Memcache,Redis,DynamoDB,MySQL,HBase,Elasticsearch和卡夫卡。

Storehaus的核心模块定义了三个特征:

  1. 包含ReadableStoregetgetAll
  2. 的只读close
  3. 只有WritableStore putputAllclose
  4. 的只写Store
  5. 结合两者的读写{{1}}
  6. 在Ruby生态系统中,您应该查看moneta,它再次为键/值存储提供统一的接口。它比Storehaus具有更多功能。