Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 除了排序列表之外,还有类似memcached的东西吗?_Sorting_Caching_List_Memcached - Fatal编程技术网

Sorting 除了排序列表之外,还有类似memcached的东西吗?

Sorting 除了排序列表之外,还有类似memcached的东西吗?,sorting,caching,list,memcached,Sorting,Caching,List,Memcached,在这种情况下,我可以从像memcached这样的系统中受益,但是可以存储(每个键)元素的排序列表,并通过添加值来修改列表 例如: something.add_to_sorted_list( 'topics_list_sorted_by_title', 1234, 'some_title') something.add_to_sorted_list( 'topics_list_sorted_by_title', 5436, 'zzz') something.add_to_sorted_list(

在这种情况下,我可以从像memcached这样的系统中受益,但是可以存储(每个键)元素的排序列表,并通过添加值来修改列表

例如:

something.add_to_sorted_list( 'topics_list_sorted_by_title', 1234, 'some_title')
something.add_to_sorted_list( 'topics_list_sorted_by_title', 5436, 'zzz')
something.add_to_sorted_list( 'topics_list_sorted_by_title', 5623, 'aaa')
然后我可以这样使用:

something.get_list_size( 'topics_list_sorted_by_title' )
// returns 3
something.get_list_elements( 'topics_list_sorted_by_title', 1, 10 )
// returns: 5623, 1234, 5436
所需的系统允许我轻松获取每个数组中的项目数,并从数组中获取任意数量的值,前提是这些值是使用附加值排序的

我希望描述清楚。问题相对简单:有这样的系统吗?

看看。它使用内存映射文件,因此速度非常快,应该与MemCached的性能相当


MongoDB是一个无模式的数据库,应该支持您正在寻找的内容(索引/排序)

MongoDB将适合您。重要的是,它有索引,因此您可以按标题为主题集合添加索引,然后检索按索引排序的项目:

db.topics.ensureIndex({"title": 1})
db.topics.find().sort({"title": 1})

为什么不在memcached中存储一个数组呢?至少在python和PHP中,memcachedapi支持这一点(我认为python使用pickle,但我记不清了)

如果需要永久数据存储或备份,memcacheDB将使用相同的API

基本伪Python示例:

获取存储的数据 stored=cache.get(storedDataName)

如果以前未存储任何内容,请初始化列表 如果(存储==无): 存储={}

---------------- 查找存储项

尝试: alreadyHaveItem=已存储[itemKey] 除KeyError外: 打印“缓存中无结果”

---------------- 添加新项目

对于newItemsDict中的项目: 存储的[项目]=新项目[项目]

---------------- 将结果保存在缓存中
cache.set(storedDataName,stored,TTL)

Redis支持列表和集合。您可以禁用磁盘保存并像使用Memcached一样使用它,而不是使用MongoDB将数据保存到磁盘。

据我所知,排序是在检索时完成的,这对我没有什么帮助-即使使用基于内存的存储,对一百万个元素进行排序,使用最多200个字符的文本值也会相当慢。但也许我弄错了-我会深入检查文档。因为当我们有一个以上的进程向列表中添加项目时,很难保持列表的排序。好的,你也可以维护一个dict列表,甚至对象,或者一个/多个排序的键列表,用于这些对象…等等…并使用插入排序…我为用户排名做这类事情。事实上,我让我的多个进程将作业放入同一个队列(也存储在memcached中),然后按顺序处理它们,有效地使一个源用于插入…无论如何,我相信你比我更了解你的问题空间,我无法从你写的内容中确定复杂性。幸运的是,实际上,您可以在客户端进行排序,并将其安全地放入CAS,而不考虑并发性。做这样的事情有几种策略。