在Prisma,我们的目标是彻底改变应用程序开发人员使用数据库的方式。考虑到大量不同的数据库和使用它们的各种工具,这是一个非常雄心勃勃的目标!
我们很高兴能够通过由Amplify Partners牵头的1200万美元的首轮A轮融资,进入追求这一目标的下一个篇章。我们对这一伙伴关系感到特别兴奋,因为Amplify是开发者工具生态系统的经验丰富的投资者,并领导了许多公司的投资,如Datadog、Fastly和Gremlin。
尽管关系数据库是在20世纪70年代开发的,但它仍然是今天最常用的数据库。尽管同时开发了其他数据库类型,从文档数据库到图形数据库,再到键值数据库,但使用数据库仍然是应用程序开发中的最大挑战之一。
虽然开发堆栈的几乎所有其他部分都已经现代化,但数据库工具在过去几十年里一直停留在相同的范例上。
在使用关系数据库时,开发人员可以选择直接使用SQL或使用称为ORMS的高级抽象。这些选择都不是特别有说服力。
使用SQL的级别非常低,从而降低了开发人员的工作效率。相比之下,ORM级别太高,开发人员在使用这种方法时会牺牲对执行的数据库操作的控制。ORM还遭受了一种从根本上被误导的抽象,称为对象关系阻抗不匹配。
类似于React.js如何使前端开发现代化,或者Serverless如何发明了一种新的计算基础设施模型,Prisma在这里带来了一种新的、现代的处理数据库的方法!
Prisma使用生成的查询构建器解决数据库访问问题的独特方法是完全类型安全的,并且可以根据任何数据库模式模式进行定制,这使它有别于以前解决相同问题的尝试。
现代化的很大一部分来自于我们对开发人员体验的主要关注。数据库工具经常与摩擦、不确定性、痛苦的调试时间和代价高昂的性能瓶颈联系在一起。
开发人员体验是我们Prisma DNA的一部分。使用数据库往往与摩擦和不确定性联系在一起,而它本应是有趣、愉快和高效的!
我们希望让使用数据库变得有趣、愉快和高效,同时引导开发人员在日常使用数据库时采用适当的模式和最佳实践!
作为一家公司,在过去的几年里,我们已经经历了许多主要产品的迭代和调整。
我们最初的产品GraphCool和Prisma1专注于将GraphQL作为一种技术。然而,当我们在生产中运行这两个工具时,我们意识到它们并没有解决开发人员的核心问题。
我们意识到,我们使用这两个工具提供的很多价值并不一定在于快速提供GraphQL服务器,而在于开发人员不需要显式地管理他们的数据库工作流。
这种认识导致了一个转折点,最终体现在对Prisma 2的重写中。使用这个新版本的Prisma,我们找到了正确的抽象级别,确保开发人员对其开发堆栈保持完全的控制和灵活性,同时不需要担心数据库工作流!
Prisma为这种现代化所采取的方法受到了Twitter、Facebook或Airbnb等大型科技公司的启发。
为了确保应用程序开发人员的工作效率,这些组织中的常见做法是引入统一的数据访问层,该层抽象数据库基础结构,并为开发人员提供更熟悉、更方便的数据访问方式。
Facebook开发了一个名为TAO的系统,以满足应用程序开发人员的数据需求。Twitter已经建立了一个名为Strato的虚拟数据库,它将多个数据源集合在一起,这样就可以对它们进行统一的查询和变异。Airbnb结合了GraphQL和Thrift,抽象出查询数据的实现细节。
构建这些自定义数据访问层需要大量时间和资源(因为这些通常是由专门的基础架构团队实现的),因此对于大多数公司和开发团队来说不是一种现实的方法。
Prisma基于与这些系统相同的核心思想和原则,使统一数据访问层的模式大众化,并使其成为各种规模的开发团队都可以访问的开源技术。
在运行了预览版和测试版一年多之后,我们最近推出了Prisma2.0投入生产。为了过渡将Prisma的核心从Scala重写到Rust,我们已经为将来扩展Prisma工具包以涵盖各种数据库工作流奠定了坚实的基础。
Prisma的主要功能是Prisma客户端,这是一个自动生成的类型安全的查询构建器,可用于访问Node.js和TypeScript中的数据库。多亏了自省,Prisma客户端可以用来操作任何现有的数据库!
注意:Prisma目前支持PostgreSQL、MySQL和SQLite数据库--还有更多计划中的数据库。如果您想查看对特定数据库的支持,请创建新的GitHub版本或订阅现有版本(例如MongoDB或DynamoDB)。
js生态系统以许多不同的框架而闻名,这些框架试图简化工作流并规定某些约定。许多框架作者决定使用Prisma作为他们选择的数据层,我们对此感到非常谦卑。
由GitHub联合创始人Tom Preston-Werner创建的新Redwood JS框架试图成为Node.js的Ruby on rails版。Redwood JS基于React和GraphQL,并附带了用于无服务器功能的内置部署模型。
另一个在社区中越来越受期待和兴奋的框架是Blitz.js。闪电战构建在Next.js之上,与Redwood相比,它采取了一种与Redwood完全不同的方法。它的目标是完全消除API服务器,恢复服务器渲染框架的简单性。
在Prisma,我们是GraphQL的超级粉丝,并相信它的光明未来。这就是为什么我们成立了Prisma实验室团队,他们致力于在GraphQL生态系统中开发开源工具。
它目前专注于构建Nexus,这是一个用于开发GraphQL服务器的令人愉快的应用程序框架。与Redwood JS相反,Nexus是一个仅限后端的GraphQL框架,对于如何从前端访问GraphQL API没有任何意见。
数据库迁移是许多开发人员的共同痛点!特别是对于在生产中运行的应用程序,通常不清楚执行架构更改的最佳方法是什么(例如,在CI/CD环境中)。许多开发人员求助于手动迁移或自定义脚本,使得该过程脆弱且容易出错。
Prisma Migrate是我们对这个问题的解决方案。PRISMA Migrate允许开发人员将声明性PRISMA模式映射到他们的数据库。在幕后,Prisma Migrate生成执行迁移所需的SQL语句。
注意:Prisma Migrate当前处于实验状态,不应在生产环境中使用。
Prisma Studio是各种数据库工作流的可视化伙伴。它提供了一个现代的GUI,允许您查看和编辑数据库中的数据。您可以在表视图和树视图之间切换,后者对于深入挖掘嵌套数据特别方便(使用下面的选项卡浏览这两个视图或尝试在线演示)。
注意:Prisma Studio当前处于实验状态,不应在生产环境中使用。。
Prisma客户端是一个特定于语言的薄层,它将查询计划和执行的重任委托给Prisma的查询引擎。查询引擎是用Rust编写的,并作为独立进程与主应用程序一起运行。
此架构使我们能够将Prisma客户端扩展到其他语言,并为Node.js社区以外的开发人员带来好处。我们已经在Prisma客户端的第一个阿尔法版本的围棋准备试用!
Prisma的设计方式是,只要有合适的连接器,它就可以潜在地连接到任何现有的数据源!
到今天为止,我们已经为PostgreSQL、MySQL和SQLite构建了连接器。MongoDB的连接器已经在开发中,未来还计划开发更多的连接器。
我们致力于构建世界级的开源工具来解决应用程序开发人员常见的数据库问题。为了能够持续我们的开源工作,我们重新计划构建商业服务,使开发团队和组织能够在使用PRISMA的项目中更好地协作。
注意:商业服务的计划不会影响我们正在构建的开源工具,这些工具将永远免费。
我们非常感谢在我们旅途中陪伴我们的每一个人!在Slake、GitHub、Twitter和许多其他渠道上看到我们活跃的社区,人们在那里谈论Prisma并相互帮助,这是一件非常棒的事情!
如果您对Prisma很好奇并想了解更多,请务必查看我们将在接下来的两天举行的在线Prisma日会议!
一定要收听汤姆·普雷斯顿-沃纳(GitHub联合创始人兼Redwood JS作者)、马特·比尔曼(Netlify首席执行官)和许多Prisma团队成员的精彩演讲和许多有趣的演讲!
要尝试Prisma,您可以按照快速入门或使用您自己的数据库设置Prisma。
快速入门(5分钟)了解如何使用Prisma客户端针对演示SQLite数据库发送数据库查询-无需设置!