在过去的几年中,我在MySQL空间设计了几个应用程序,然后不断改进性能和可扩展性方面,我感到很自在.我也有一些使用memcached的经验,可以在经常查询的结果集上提供应用程序端加速.最近我将Amazon SDB作为我电子商务实验的主要"数据库".
为了过度简化,我在脑海中使用SDB服务的快速理由是,使用无模式数据库结构可以让我专注于我的项目的逻辑问题,并在我的数据存储中快速累积内容.也就是说,不要担心事先设置和规范产品属性的所有可能排列; 只需开始加载产品,SDB就会记住所有可用的东西.
现在我已经设法完成了项目的前几次迭代,并且我需要为数据设置简单的接口,我正在运行我曾经认为与MySQL合作的问题.例如:在select语句中进行分组并限制语法以查询"items 50到100".我使用SDB的无架构体系结构获得的轻松优势,使用仅超过1800个项目查询/循环结果集而失去了性能.
现在我正在阅读像Tokyo Cabinet这样的项目,这些项目正在扩展内存中键值存储的概念,以极其快的速度提供伪关系功能(14x我在某处阅读).
我的问题:我作为应用程序设计人员/开发人员可以通过哪些基本指导或启发式方法来评估哪个数据库技术最适合我项目的每个阶段.
例如:在原型设计阶段,应用程序的逻辑/技术未知数使数据结构变得流畅:使用SDB.在用户可交付成为优先级的更成熟的阶段,使用传统工具,您不必花时间编写排序,分组或分页逻辑.
非常感谢使用这些工具的实际经验.
谢谢!
沙希布
是否存在用于分布式内存缓存,分布式任务,发布/订阅消息传递的库?我在Java中使用过Hazelcast,我想要类似的东西.
我知道Memcached是一个内存缓存,甚至是分布式的,但它缺少消息传递和远程任务.
我只需要一些东西来协调服务器集群而不使用传统的RPC和套接字编程.
谢谢.
我已经搜索了内存中的压缩,发现有很多库不具备此功能.zlib似乎被广泛使用 - 但它似乎也很老了.我在这里问是否有更新,更好的选择.
我想在内存中压缩的数据是大小为几兆字节(2-16 MB)的内存池,每个块包含两个不同结构的数据以及一些指针数组.在块内部,结构和数组没有特定的顺序,当应用程序需要创建这样的元素时,它们只是在另一个之后分配.
你会建议使用什么压缩库?压缩和解压缩性能(两者)比压缩质量更重要.
另外 - 出于压缩原因 - 为两个不同的结构和数组分别使用单独的池会更好吗,这样每个要压缩的数据块只包含一种数据?
这是我第一次打算使用内存压缩,我知道我的问题可能过于笼统,无法给出一个好的答案 - 但每个提示都是受欢迎的!
谢谢!
我需要动态地使用资源做很多事情:解析xsd/xml文档,构建和编译java类,将它们打包到jar和wars中,在DB中保存,将它们部署为OSGi等.
我使用的大多数库/ API允许在内存中执行所有这些中间任务,但是只有一些"特殊"库可以运行java.io.File.除了使用在Java EE环境中不好的真实临时文件和目录之外,没有什么可以留给我的.
我相信必须有一个库/解决方案,用于内存文件结构,扩展节点java.io.File(我认为).请放入已知/类似库的链接.欢迎任何评论.
谢谢!
我在Redis上有一个简单的问题.如果它的性能关键是它在内存中,乳清不能在常规SQL数据库上完成吗?
我正在尝试查看SQL Server 2014和内存优化表以及它与Power BI的集成.我正在考虑将现有数据库(包含多个内存优化表)迁移到Azure的最佳方法是什么?Azure SQL数据库是否支持内存优化表?
谢谢.
我想使用 www.eventstore.org 编写一些集成测试来测试我是否能够序列化一些域事件并将它们附加到流中,并检索它们并反序列化它们等。
我一直在试图找出人们通常是如何做到这一点的,我阅读了一些 Greg Young 关于不同方法的回答(有点过时):
第二个选项似乎很理想,因为我可以简单地运行一个干净的事件存储,运行我的测试并在最后停止服务器,以便所有数据都消失了。
我已经看到可以使用参数运行事件存储服务器,--mem-db而不是在磁盘中保留任何内容。
问题是:如果运行集成测试的操作系统很可能没有安装事件存储二进制文件,因此在内存中没有真正的事件存储服务器可以运行,那么如何在运行集成测试时使用内存中事件存储?我不希望我的测试仅仅因为没有在执行测试的机器上安装和启动并运行事件存储而失败。
我知道市场上的一些数据库有一些 nuGet 包,其中包含生产中使用的相同数据库引擎,但作为内存数据库,因此机器上不需要“真实”服务器来运行测试。所有二进制文件都位于项目可用的 DLL 中。
我试图找到一些关于这样的东西是否可用于事件存储的答案。我读了一些关于某些嵌入式客户端 API 的评论,但我发现的文档不是很清楚。其他评论提到了一个叫做 MiniNode 的东西,但同样,线程假设太多,还没有找到关于它的内容或我如何用于我的测试的清晰描述。
总之,任何人都可以提供一个集成测试示例(如果可能,xUnit),其中IEventStoreConnection使用的是内存中事件存储,而根本没有安装事件存储?
更新 1:我尝试添加 nuGet 依赖项EventStore.Client.Embedded来使用它,以防万一它是我需要的。但它不支持 DotNetCore(标准 2.0),所以我不知道。然后我读了这个ClientAPI.NetCore 问题,有人建议采用不同的测试方法,即使用 Chocolatey 抓取EventStore代码,然后从代码中执行EventStore.ClusterNode(我会用--mem-db标志来做)。我不确定我是否喜欢这样,至少不会超过将 Docker 用于相同目的。我仍然想知道是否有替代方案?
更新 2由于我使用的是 gitlab,因此我通过启动一个事件存储服务(容器)来运行与事件存储的集成测试,该服务将在持续集成步骤结束后立即终止。
integration-tests:
image: my-images-repo/my-gitlab-runner-dotnet-core:latest
stage: integration-tests
services:
# add event store service
- eventstore/eventstore:release-4.1.1-hotfix1
variables:
# event store service params testing with standard ports
EVENTSTORE_INT_TCP_PORT: "1113"
EVENTSTORE_EXT_TCP_PORT: "1113" …Run Code Online (Sandbox Code Playgroud) 我试图通过提供内存中缓存来减少数据库访问量。我了解可以通过使用会话和cookie来获得缓存,但是这仅适用于每个客户端。如果在每个会话中都进行一次相同的查询,则缓存将无用。但是我只想访问一次数据库并对其进行缓存。
有没有一种方法可以在服务器端脚本可以访问的内存中创建缓存?我不想将缓存数据存储在文件中。
我们针对内存数据库运行了大量测试。每个测试都会创建其模式。
到目前为止,我们正在针对 HSQL 数据库运行这些测试,但由于 H2 应该更快,因此我们尝试切换到 H2。
从执行时间来看,H2 实际上明显更快(10-50%)。但是,当运行大量测试时,H2 似乎会在中间休息,导致整体性能比 HSQLDB (800-900%) 差得多。
有什么想法如何保持完整测试套件的单个测试的良好性能吗?
这些是我们为 H2 尝试过的 URL:
jdbc:h2:mem:testdb
jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
jdbc:h2:mem:testdb;MVCC=true
jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=Oracle;MVCC=true
Run Code Online (Sandbox Code Playgroud)
这是我们在 HSQL DB 中使用的:
jdbc:hsqldb:mem:testdb
Run Code Online (Sandbox Code Playgroud)
编辑:
我尝试编写一个可重现的测试用例,但这并不容易,因为当我们只使用简单的 jdbc 时,我们似乎没有问题。经过大约 500 个全部使用 hibernate 的测试后,测试变得缓慢。
我在 VisualVM 中注意到的唯一一件事是,在测试开始变慢的同时,CPU 使用率下降到接近于零,并伴有一些噪音。
编辑2:
JStack 输出:
2011-11-21 08:42:34
Full thread dump Java HotSpot(TM) Client VM (16.3-b01 mixed mode):
"ReaderThread" prio=6 tid=0x18e47400 nid=0x318 runnable [0x190ef000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
- locked <0x099d61c0> (a java.io.InputStreamReader)
at java.io.InputStreamReader.read(InputStreamReader.java:167) …Run Code Online (Sandbox Code Playgroud) 我正在使用扩展 AbstractFormLoginAuthenticator 的类来验证我的应用程序。登录表单包含电子邮件和密码字段。我需要在内存中有一个硬编码的用户,并且能够通过该登录表单登录。我如何配置安全文件才能使其工作?
class LoginFormAuthenticator extends AbstractFormLoginAuthenticator
private $userRepository;
private $router;
private $passwordEncoder;
public function __construct(UserRepository $userRepository, RouterInterface $router, UserPasswordEncoderInterface $passwordEncoder)
{
$this->userRepository = $userRepository;
$this->router = $router;
$this->passwordEncoder = $passwordEncoder;
}
public function supports(Request $request)
{
return $request->attributes->get('_route') === 'app_login'
&& $request->isMethod('POST');
}
public function getCredentials(Request $request)
{
$credentials = [
'email' => $request->request->get('login_form')['email'],
'password' => $request->request->get('login_form')['plainPassword'],
];
$request->getSession()->set(
Security::LAST_USERNAME,
$credentials['email']
);
return $credentials;
}
public function getUser($credentials, UserProviderInterface $userProvider)
{
return $this->userRepository->findOneBy(['email' => $credentials['email']]);
}
public function checkCredentials($credentials, …Run Code Online (Sandbox Code Playgroud) in-memory ×10
c++ ×2
php ×2
asp.net-core ×1
azure ×1
c# ×1
caching ×1
cloud ×1
compression ×1
distributed ×1
eventstoredb ×1
file ×1
h2 ×1
java ×1
performance ×1
rdbms ×1
redis ×1
relational ×1
server-side ×1
sql ×1
symfony ×1
unit-testing ×1