Can you please point to alternative data storage tools and give good reasons to use them instead of good-old relational databases? In my opinion, most applications rarely use the full power of SQL--it would be interesting to see how to build an SQL-free application.

推荐答案

Plain text files in a filesystem

  • Very simple to create and edit
  • Easy for users to manipulate with simple tools (i.e. text editors, grep etc)
  • Efficient storage of binary documents

XML or JSON files on disk

  • As above, but with a bit more ability to validate the structure.

Spreadsheet / CSV file

  • Very easy model for business users to understand

Subversion (or similar disk based version control system)

  • Very good support for versioning of data

Berkeley DB (Basically, a disk based hashtable)

  • Very simple conceptually (just un-typed key/value)
  • Quite fast
  • No administration overhead
  • Supports transactions I believe

Amazon's Simple DB

  • Much like Berkeley DB I believe, but hosted

Google's App Engine Datastore

  • Hosted and highly scalable
  • Per document key-value storage (i.e. flexible data model)

CouchDB

  • Document focus
  • Simple storage of semi-structured / document based data

Native language collections (stored in memory or serialised on disk)

  • Very tight language integration

Custom (hand-written) storage engine

  • Potentially very high performance in required uses cases

I can't claim to know anything much about them, but you might also like to look into object database systems.

Sql相关问答推荐

如何将多个 Select 查询从一个表中组合出来

获取家谱树中第一次出现的特定信息,然后停止

如何并行SELECT和RESET?

有没有一种正确的方法来利用SQL UNION来从三个潜在查询中 Select 最大值?

如何在SQL中按每个子组的顺序更新数据?

为什么两个不同的窗口函数给出不同的排序结果?

两个不同星期的销售额,不加成一行

用户购买平台及金额统计

SQL按日期分组字段和如果日期匹配则求和

如何为该查询编写正确分区依据

在Athena中使用regexp提取括号前的字符串值

如何在多列上编写具有不同条件的查询?

SQL 查询是否返回列表中仅包含某些值而不包含其他值的行?

如何使用最后一个非 NULL 值在 PostgreSQL 列中填充 NULL 值

如何使用SELECT语句进行左连接,并根据右表中的特定值过滤结果?

按所选的值将记录分组到不同的列中

Oracle PL/SQL长期运行问题

带有数组输入参数的Snowflake UDF优化

如果 SQL 中不存在数据,如何根据某个 ID 为所有日期添加前一行

在 ATHENA 的字符串中 Select 一个字符串