首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >跨AppDomain边界的内存数据库

跨AppDomain边界的内存数据库
EN

Stack Overflow用户
提问于 2009-09-02 22:57:23
回答 2查看 617关注 0票数 2

我想知道是否有一个内存中的数据库实现,其中相同的内存中的数据库实例可以跨多个AppDomains使用。

的动机.和很多人一样,我们为我们的客户机-服务器应用程序进行了集成测试。有几种测试模式,从最沉重的测试模式--现实场景,客户端、服务器和数据库都位于不同的机器上,到最轻量级的测试模式,客户机和服务器都是同一进程中的两个AppDomains,数据库是同一台机器上的一个sqlite文件。

当然,轻量级场景是最快的,开发人员经常使用它,而重型场景则在每次构建时在我们的CI服务器上运行。

我的目标是通过使用内存中的数据库进一步加快轻量级场景的速度。

问题。 OK,所以sqlite有一个内存中的数据库选项,但是这样的数据库:

  • 在关闭与其的连接后释放。
  • 不能有两个打开的连接,新连接将打开另一个数据库实例。

不幸的是,我需要两个--一个用于运行在客户端AppDomain中的测试暂存代码,另一个用于服务器端DAL。

我意识到了sqlite数据库工作方式背后的原理。我还意识到在两个AppDomains之间共享内存数据库的困难.如何在不恢复到内存映射文件的情况下共享两个AppDomains之间的内存缓冲区(我不想处理任何文件系统API)?

我看到的唯一有效的解决方案是让两个AppDomains共享一个非托管内存缓冲区,其中对缓冲区的句柄将从一个AppDomain传递到另一个AppDomain。但是,是否有任何内存中的数据库实现支持此设置?

(一个效率低下的解决方案是将整个数据库从一个AppDomain传递到另一个数据库,然后再返回)。

我的分析可能是完全错误的,可能有一些简单的解决办法我错过了。无论如何,我想知道是否有人遇到过同样的问题,以及他们是如何解决的。

P.S.

我真的想避免任何类型的files,比如内存映射文件。

EN

回答 2

Stack Overflow用户

发布于 2009-09-02 23:18:03

我想到了三个解决方案,但它们都需要一些配置。它们都要求您创建第三个AppDomain,其中内存中的数据库作为一个单例驻留在其中,并为一个具有定义良好接口的类编写代码。

第一个解决方案是通过AppDomains调用代码。您传递的对象必须是“可重构的”,这可能是一个很重要的设置。(派生自MarshalByRefObject等)不仅如此,您传递给或从AppDomains传递的任何对象都必须是可序列化的。它是可行的,但有时它并不漂亮。

第二个解决方案是使用远程处理。这是一种古老的技术,但仍然有效。它基本上是通过AppDomains对上面的调用进行形式化化。我不会再在这里说这件事了,提起这件事几乎让我感到尴尬。

第三种解决方案是使用WCF和快速的namedPipeBinding。WCF调用的两端可以位于相同的应用程序和不同的应用程序域中。用这种方式编写代码的一个副作用是,您可以在稍后切换内存中的数据库,以便功能齐全的数据库,并将绑定更改为跨intranet或internet工作。

第三种解决方案是我目前使用的类似于您描述的项目的解决方案。我们的目标是隔离数据库,这样我们就可以在不“污染”其他层的情况下尝试nHibernate。

票数 1
EN

Stack Overflow用户

发布于 2009-09-02 23:15:08

我不知道任何这样的数据库。

但是想一想这样的数据库会有什么样的形式是很有趣的。如果我们认为一个应用程序域是一个轻量级的过程,那么我们可以将跨域会话(序列化)视为消息传递。然后,我们可以定义一个简单的消息协议,允许客户端发送查询,并响应获取结果。

  1. 您的数据库应该在自己的应用程序域中运行。
  2. 每个客户端都应该在自己的应用程序域中运行。
  3. 应该使用app域之间的标准序列化来返回查询结果。最简单的方法是将查询封装在它们自己的类中,这些类在构造时执行。这样,您可以使用AppDomain.CreateInstance
  4. 您的数据库应该能够处理来自任何线程的请求。

但我不认为这是个好主意。在应用程序域的工作和互操作中有太多的细节来实现这个100%的正确。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1371792

复制
相关文章
ios tableview 上加 textfiled
ios tableview 上加 textfiled  首先附上我项目中用曾经用到的几张图  并说明一下我的用法: 图1: 图2: 图3: 心在你我说一下  我当初的实现 方法 ,希望能给你们一些  
用户1219438
2018/02/01
9720
ios tableview 上加 textfiled
AlphaGo 的下一步计划
今日 DeepMind 的 AlphaGo 3:0 柯洁。整个未来围棋峰会结束。DeepMind 宣告的下一步的计划。 仅仅看到的棋盘上的三个子,我们就明白这不是一场寻常的比赛。 中国围棋大师,世界
用户1107453
2018/06/21
4430
京东物流下一步
3月10日,京东物流发布了其上市后的首份年度业绩报告。报告显示,2021年京东物流总收入达1047亿元,同比增长42.7%,其中外部客户收入达591亿元,同比增长72.7%,占总收入比重的56.5%。伴随着其外部业务量、技术和精细化管理能力的不断提升,规模经济效应得到释放,盈利水平也得到了改善。
金融外参
2022/05/11
5400
黄海下一步要完成的工作
_json[“flag_id”] = flag_id _json[“resource_title”] = res[1][“resource_title”] _json[“file_name”] = res[1][“file_name”]
全栈程序员站长
2022/06/29
2350
万物联网的下一步
作者:杜志挺 近年来,有许多国家开始大力推广物联网(Internet of Things, IoT),物联网的发展会比RFID更为精彩.RFID提供对象一个独一的辨识码,借助这个辨识码,我们可以区别一个对象和另一个对象的不同,是在个别对象的层次而不是商品的层次。 例如,两包威化饼(相同商品)有相同的条形码(barcode),但贴上不同RFID后,我们可以区别出第一包威化饼和第二包不同,这带来许多好处,包括可以大幅提高自动化效率。想象一下,进超市买东西用自家菜篮,买了些生果丶杂货,然后直接走出付费处,系
企鹅号小编
2018/02/01
5960
万物联网的下一步
【IOS开发基础系列】UIAlertController专题
http://www.cocoachina.com/ios/20141126/10320.html
江中散人_Jun
2023/10/16
6130
【IOS开发基础系列】UIAlertController专题
深度学习下一步如何发展?
来源:https://www.zhihu.com/question/47602063/answer/150845355
CreateAMind
2018/07/24
6150
深度学习下一步如何发展?
【翻译】下一步:Go 泛型
自从我们上次写下关于在Go中加入泛型的可能性的文章以来,已经快一年了。现在是该更新的时候了。
Regan Yue
2023/03/30
2480
GPT-4下一步?
这次GPT-4发布可谓万众瞩目,最重要的升级就是多模态,也就是不止支持文本,还支持图片了。
木羊
2023/09/09
2860
项目更新:OpenStack Neutron的下一步是什么
在最近的温哥华峰会上,OpenStack项目团队负责人(PTL)和其核心团队成员介绍了OpenStack项目的相关更新,以及如何参与并影响路线图。
SDNLAB
2018/07/30
4450
项目更新:OpenStack Neutron的下一步是什么
SaaS已死,软件的下一步是什么?
在上个世纪的前半个世纪中,大量的电气化设备取代了传统的人工设备并为人们创造出了大量的财富。 在当时,因为电气化是一种全新的词语,所以在人们描述这些新颖的小工具时,限定术语“电动”是一个重要的区别。 然而,随着人们生活中的每一个设备均应用了电气化技术,“电动”这个形容词最终被抛弃了。而这种变化似乎也将发生在软件领域中。 如今,SaaS(Software as a Service)这一词语的逐渐没落,而人们也开始将眼光回归到“软件”上面。一个典型的案例,就是Salesforce将对于它“没有软件”的口号也解释为
人称T客
2018/06/06
6640
配置SDK Manager,迎接下一步
SDK Manager.exe 是ADT Bundle根目录下的一个SDK 管理程序,该程序主要负责下载、更新、删除与sdk 相关的文件。 由于谷歌目前不推荐使用Eclipse,已经停止了对ADT的更新,所以ADT Bundle集合包里的Android版本只有4.4W,不是最新的Android版本,那就需要我们手动更新一下Android版本,当然必不可少的就是需要使用到我们的SDK Manager。 一、SDK Manager入口 进入ADT Bundle工具包的解压包下面的adt-
分享达人秀
2018/02/02
1.5K0
配置SDK Manager,迎接下一步
学习世界模型,通向AI的下一步:Yann LeCun在IJCAI 2018上的演讲
Yann LeCun 开场介绍说,当前几乎所有的机器学习从业者在实践中使用的都是监督式学习:向机器展示大量的样本,然后告诉机器正确的答案与内部参数,然后就能做图像识别之类的任务。而过去几年,监督式学习有了极大的成功,应用也非常广泛。下图对比了传统机器学习与深度学习各自的特点。
机器之心
2018/07/26
4580
学习世界模型,通向AI的下一步:Yann LeCun在IJCAI 2018上的演讲
GWAS做完了,下一步做什么?
通过GWAS分析可以找出与疾病相关联的SNP位点,然而我们的根本目的是找出可能导致疾病发生的SNP位点,这些位点位于GWAS分析结果中,完成了GWAS分析之后,我们还需要借助下游分析对GWAS的分析结果进一步注释和挖掘,筛选可能致病的SNP位点。
生信修炼手册
2019/12/19
6.3K0
GWAS做完了,下一步做什么?
python 协程 下一步执行 常用
import asyncio import time from random import randint
用户5760343
2022/01/09
2130
idea设置快捷键为eclipse_idea设置上一步下一步快捷键
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/08
3790
idea设置快捷键为eclipse_idea设置上一步下一步快捷键
技术解码 | 版权保护的下一步——数字水印
数字水印作为一种新兴的技术方案,在版权保护和溯源中具有广阔的应用前景。本周的技术解码就由狄冲老师为大家解密图像和视频数字水印的相关内容
腾讯云音视频
2020/07/17
5.6K0
技术解码 | 版权保护的下一步——数字水印
马云火烧南极的下一步是 游戏?!
昨日,中国最大IT社区CSDN总编刘江在其认证微博透露,马云在一个小型沟通会称将“大力”进军游戏,与腾讯直接竞争。马云和马化腾私交甚好,还联合马明哲三马齐推众安在线保险公司,或许是怕马化腾接受不了自己的变化,马云还说“这种竞争不是像美国巨头那样你死我活,而是充满乐趣”。 没错,是“大力”。马云和阿里副总裁王帅均表示过,阿里不投资或者不做网络游戏。去年6月淘宝推出游戏联运平台小试牛刀,现在则要大力进军。马云最近一反常态,多次讲话均弥漫着前所未有的杀气,大有与腾讯对决的势头。进军游戏,意味着阿
罗超频道
2018/04/27
7850
点击加载更多

相似问题

遍历tableview的iOS下一步/上一步按钮

13

iPhone MPMoviePlayerController上的下一步/上一步按钮

31

iPhone键盘下一步按钮

12

Iphone Uitoolbar下一步按钮

10

带有下一步和上一步按钮的面板

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文