当应用程序设计需要过程代码和实质数据库时,许多开发人员似乎要么被吓倒了,要么有点不知所措。在大多数情况下,“数据库”表示带有SQL接口的RDBMS。
然而在我看来,解决两种范式之间“阻抗不匹配”的许多技术将更适合于ISAM(索引顺序访问方法)工具集,您可以(必须)指定表,例如,索引,行 - 导航等 - 完全是ActiveRecord模型规定的行为。
在PC早期,dBASE及其后代是主要的dbms平台,它是一种增强的ISAM。 Foxpro在今天成功延续了这一血统。 MySQL和Informix是两个至少最初构建在ISAM实现之上的RDBMS,因此这种方法应至少具有同等性能。我感觉许多对SQL不满意的开发人员至少在无意识中渴望恢复ISAM方法,并且数据库可以更容易被视为一组高效的可链接超阵列。在我看来,这可能是一个非常好的主意。
您是否曾尝试过ORM-to-ISAM实施?怎么成功?如果没有,您认为值得一试吗?该模型是否有明确的工具集?
答案 0 :(得分:3)
也许猪拉丁语是你想要的?根据这篇文章 http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=693D79B5EFDC0452E1C9A87D1C495D4C?doi=10.1.1.124.5496&rep=rep1&type=pdf:
“此外,很多人都是 lyze这些数据是根深蒂固的 程序员程序员,谁找到了 声明式,SQL风格 不自然。成功的更多 程序图 - 减少编程 模型及其相关的可扩展性 商品硬实施 洁具,是上述证据。 但是,map-reduce范例是 过于低级和僵化,并导致 大量的自定义用户代码 难以维护和重用。我们 描述一种名为Pig的新语言 我们设计的拉丁文适合 声明之间的甜蜜点 SQL的风格,低级, map-reduce的程序风格。“
答案 1 :(得分:2)
当然,ISAM提供应用程序所需服务的时间和地点比成熟的SQL DBMS更低成本和开销。 ISAM机制的一个缺点是不一定有系统目录来描述数据;另一个原因是通常很少有用户友好的工具来获取数据。这些都是RDBMS提供相当大优势的地方。最好的ISAM(或类似)系统提供事务支持 - 有时甚至是XA事务。
如果您需要进行复杂的连接和计算(例如聚合),DBMS所做的工作可以带来巨大的好处。如果你需要的只是访问记录,那么ISAM可能是有益的。
使用基于ISAM的系统比使用DBMS更难以实施安全性。此外,您还需要担心崩溃时文件的完整性。大多数DBMS使用双进程架构(DBMS客户端在与DBMS服务器不同的进程中),它在客户端崩溃(或客户端PC关闭)时提供弹性。您还必须担心备份和还原 - 一个称职的DBMS有适当的系统,可以在数据库使用时提供数据库的连贯备份;目前尚不清楚ISAM系统是否能提供这种完整性。
总的来说,给定一个合适的ISAM机制,在ORM系统中使用ISAM机制而不是完整的RDBMS至少有时可能经常有优势。
答案 2 :(得分:1)
我在20世纪90年代实现了一个ORM-to-isam库,它作为共享软件获得了一些(非常)适度的成功。我基本同意你对ISAM的优点所说的话,我认为在构建ORM层或产品时如果只考虑灵活性和速度,最好使用ISAM。
然而,您承担的风险是您将失去现在市场上各种SQL相关产品的好处。特别是,报告工具已经发展到与最流行的SQL包更紧密地集成。虽然20世纪90年代的ISAM产品供应商提供了与Crystal Reports等产品集成的ODBC驱动程序,但即便如此,似乎市场正在远离ISAM,如果我继续使用该技术,我将面临过时的风险。因此,我切换到了SQL。
有一点需要注意:自从我在ISAM沙箱中玩游戏已经将近十年了,所以我不能声称能够使用最新的ISAM工具及其解决方案来解决这个问题。但是,除非我确信在没有报告工具支持的情况下我不会被困,否则我不会采用基于ISAM的ORM,无论其优点如何。这甚至不包括可用于基于SQL的开发的其他工具!
答案 3 :(得分:1)
我分享了dBase,Clipper和FoxPro。但是我相信SQL提供的关系模型是无限强大和有用的,Oracle和SQL Server等产品值得他们在市场上取得成功。
我总是感到惊讶的是,人们为~80-90%的案例创建了大量的映射层,并编写了10-20%的自定义SQL来处理复杂的查询(主要是报告)和批处理数据移动。考虑到对冬眠,活跃记录等的仇恨程度,我必须通过采用DAL / DAO模型做一些非常好或非常愚蠢的事情。 - 从早些时候的越南讨论。
答案 4 :(得分:1)
多值数据库有人吗? (又名Pick)认为没有标签的XML。它们比RDBMS早了至少十年,如果你知道在哪里看,它们仍然很强大。
答案 5 :(得分:1)
如果您确切知道自己想要对数据做什么以及如何做到这一点,请选择ISAM。您会很高兴,因为您将构建索引以满足您的确切需求。事先了解如果您的需求发生变化,您将需要更改索引。数据访问速度非常快。
如果您不确定将使用哪些数据,或者您知道您的数据需求会随着时间的推移而发生很大变化,请选择SQL。您将具有即席查询,快速报告周转,数据挖掘等的灵活性。
这两种类型的数据库多年来已经成熟。两者都可以拥有强大的服务器,包括实时备份,事务,安全性,元数据等。
答案 6 :(得分:0)
老问题,但有趣的讨论。 ISAM的概念非常重要,我们在今天的RDBMS中提供的附加功能(如所讨论的那样,即备份,一致性,安全性,元数据)为我们带来了显着的好处。
随着NoSQL热潮(是的,我说它......热潮)并不意味着我们无法在RDBMS内模拟类似ISAM的访问。你肯定我会尽可能多地推断数据库中的逻辑,但有时候会像“传统的”数据网格化/多维数据插值那样我将通过我自己的逻辑遍历所有必要的记录索引。