我计划有一个SQL事实表,涉及一个我不希望索引的文本字段(我只读出数据,很少更新它).我认为这个表可能会变得非常大,主要是由于这个文本字段.我的数据库中的其余数据确实是有关系的,但我相信如果我存储指向平面文件的指针(其中每个指针指向存储在S3中的不同文本文件),我可以更容易和更便宜地扩展.而不是使用文本字段.
这似乎是越来越受欢迎的替代方案是一个完全的NoSQL基于文档的解决方案(例如,CouchDB的,MongoDB的,等等),我想知道什么是权衡(可扩展性/可靠性/安全/性能/易于实施的/易于维护/成本在简单地使用SQL文本字段,指向平面文件的指针,还是在NoSQL文档存储的上下文中完全重新思考整个系统之间?
-- express_example |---- app.js |---- models |-------- songs.js |-------- albums.js |---- and another files of expressjs
songs.js:
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var SongSchema = new Schema({
name: {type: String, default: 'songname'},
link: {type: String, default: './data/train.mp3'},
date: {type: Date, default: Date.now()},
position: {type: Number, default: 0},
weekOnChart: {type: Number, default: 0},
listend: {type: Number, default: 0}
});
module.exports = mongoose.model('Song', SongSchema);
Run Code Online (Sandbox Code Playgroud)
album.js:
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
SongSchema = require('mongoose').model('Song'),
ObjectId = …Run Code Online (Sandbox Code Playgroud) 我需要跟踪哪个用户访问了哪个页面多少次.
在MySQL中我会做这样的事情:
INSERT INTO stats (user_id, url, hits)
VALUES (1234, "/page/1234567890", 1)
ON DUPLICATE KEY UPDATE hits = hits + 1;
Run Code Online (Sandbox Code Playgroud)
在表stats (user_id, url)中UNIQUE
我正在寻找为此目的找到最快的系统.因为这仅适用于统计数据,因此保持耐久性并不重要.
Redis或MongoDB或Memcached或任何其他NoSQL系统是否支持这样的功能?您将如何实现此目标以获得最高性能?
所以,这是场景:
spring-data-neo4j以下代码基于示例代码Cineasts:
public interface CrewRepository extends GraphRepository<Crew> {
Iterable<Crew> findByNameLike(String name);
@Query("start thinker=node({0}) match thinker-[:crews]-crews return crews")
Set<Crew> findByThinker(Long thinkerId);
}
Run Code Online (Sandbox Code Playgroud)
这里没有消息.问题是:查询findByNameLike不起作用,而findByThinker确实如此.
我已多次修改我的日志配置文件 - 最终版本是下面的版本 - 但是,无论我尝试什么,我都看不到任何查询被记录 - 无论是在我的日志文件还是在服务器上.
<logger name="org.neo4j">
<level value="DEBUG" />
<appender-ref ref="console" />
</logger>
<logger name="org.springframework.data.neo4j">
<level value="DEBUG" />
<appender-ref ref="console" />
</logger>
<root>
<priority value="error" />
<appender-ref ref="console" />
</root>
Run Code Online (Sandbox Code Playgroud)
我想要的只是记录查询,所以我可以看到它是否是一个错误,spring-data-neo4j或者我是否遗漏了什么......我已经查看了两个文档,代码示例,找不到任何具体的内容.
有帮助吗?谢谢!
我在运行Ubuntu Linux Natty的VMWare Workstation中安装了Riak(1.0.2).这是一台机器安装而不是集群.
我将后端从BitCask更改为LevelDB以利用二级索引.但是,现在我的所有其他数据都无法访问(我确定它仍然存在,可能与新的后端不兼容).
如何备份Riak数据并使其可以在后端之间访问?!
提前致谢.
假设你有一个nosql数据库 - redis,cassandra,mongodb.您需要检查此数据库的整体性能 - 各种平台,操作系统,甚至用于测试的编程语言.它不依赖于特定的应用程序或架构.
我发现的关于数据库性能测试的所有材料都像测试数据库作为某个产品的一部分(特定方案,特定环境).当数据库是产品本身时,您是否考虑过数据库性能测试?
期待你的帮助.
-vova
让我们假设我们有最简单的Map索引:
Map = posts => from post in posts
orderby post.DateTime
select new { Id = post.Id, DateTime = post.DateTime }
Run Code Online (Sandbox Code Playgroud)
OrderBy子句如何影响Map索引结果?如果您的查询未明确提供订单子句,它是否定义了默认文档排序?如果在索引和查询中既没有提供排序子句,那么文档是如何排序的?
我们正在采用MongoDB来构建新的解决方案,目前正在尝试根据我们的需求设计最有效的数据模型,并考虑数据项之间的关系.
我们必须在用户,项目和列表之间保持三方关系.用户可以拥有许多项目和许多列表.列表将包含一个用户和多个项目.一个项目可以属于许多用户和许多列表.后者尤其重要 - 一个项目可能属于潜在的大量列表:数千,当然可能数十或数十万.未来可能甚至是数百万.我们需要能够在两个方向上导航这些关系:例如,获取列表中的所有项目或项目所属的所有列表.我们还需要解决方案是通用的,以便我们可以在需要时添加更多类型的文档和关系.
所以似乎有两种可能的解决方案.第一种是数据库中的每个文档都有一个由一系列ID组成的"关系"集合.因此,列表文档将具有包含所有项的ID的项目的关系集合以及具有用户的单个ID的关系集合.在此模型中,当项目属于许多,许多用户或许多列表时,这些数组将变得庞大.
第二个模型需要一种新类型的文档,一个"关系"文档,用于存储每个合作伙伴的ID和关系名称.这会整体存储更多数据,因此会影响磁盘空间.在NoSQL中,它看起来像是一种"不自然"的方法来解决这个问题.
性能方面,空间方面,架构方面,这更好,为什么?
干杯,马特
我想通过REST将一个带有特殊字符的密钥(在我的情况下为斜线)存储到Riak.
如何http://wiki.basho.com/Riak-Search---Querying.html#Fields说:
如果您的字段包含特殊字符,例如('+',' - ','/','[',']','(',')',':'或空格),则围绕短语用单引号,或用反斜杠转义每个特殊字符.
但这些领域,而不是关键.我试图反斜杠,但遗憾的是它不起作用.
我找不到关于这个问题的任何信息.有人知道如何掩盖钥匙中的特殊字符吗?
示例(不工作):
PUT https://riak:8069/buckets/key/keys/11111\/2
Run Code Online (Sandbox Code Playgroud)
其中键是11111/2
nosql ×10
mongodb ×5
riak ×2
.net ×1
express ×1
flat-file ×1
javascript ×1
load-testing ×1
memcached ×1
mongoose ×1
mysql ×1
neo4j ×1
performance ×1
ravendb ×1
redis ×1
spring-data ×1
sql ×1
testing ×1
text ×1