存储和检索包含元组列表的数据存储区实体时,存储此列表的最有效方法是什么?
当我遇到这个问题时,元组可以是从键值对到日期时间和样本结果到(x,y)坐标的任何东西.
元组的数量是可变的,范围从1到几百.
包含这些元组的实体需要快速/廉价地引用,并且不需要对元组值进行索引.
我曾经有过几次这个问题,并且已经通过多种方式解决了这个问题.
方法1:
将元组值转换为字符串,并将它们与一些分隔符连接在一起.
def PutEntity(entity, tuples):
entity.tuples = ['_'.join(tuple) for tuple in tuples]
entity.put()
Run Code Online (Sandbox Code Playgroud)
优点:在数据存储区查看器中可以轻松读取结果,一次性获取所有内容. 缺点:潜在的精度损失,反序列化/序列化所需的程序员,以字符串格式存储数据所需的更多字节.
方法2:
将每个元组值存储在列表中并压缩/解压缩元组.
def PutEntity(entity, tuples):
entity.keys = [tuple[0] for tuple in tuples]
entity.values = [tuple[1] for tuple in tuples]
entity.put()
Run Code Online (Sandbox Code Playgroud)
优点:不会损失精度,令人困惑但仍然可以在数据存储区查看器中查看数据,能够强制执行类型,一切都可以获取.
缺点:程序员需要压缩/解压缩元组或仔细维护列表中的顺序.
方法3:
在一些庄园json,pickle,协议缓冲区中序列化元组列表,并将其存储在blob或text属性中.
优点:可用于对象和更复杂的对象,错误匹配元组值的风险更小.
缺点: Blob存储访问需要和额外获取?,无法在数据存储查看器中查看数据.
方法4:
将元组存储在另一个实体中并保留密钥列表.
优点:更明显的架构.如果实体是视图,我们不再需要保留元组数据的两个副本.
缺点:两个提取需要一个用于实体和键列表,一个用于元组.
我想知道是否有人知道哪一个表现最好,是否有一种我没有想过的方法?
谢谢,吉姆
我一直在玩ElasticSearch以获得我的新项目.我已将默认分析器设置为使用ngram tokenfilter.这是我的elasticsearch.yml文件:
index:
analysis:
analyzer:
default_index:
tokenizer: standard
filter: [standard, stop, mynGram]
default_search:
tokenizer: standard
filter: [standard, stop]
filter:
mynGram:
type: nGram
min_gram: 1
max_gram: 10
Run Code Online (Sandbox Code Playgroud)
我创建了一个新索引并添加了以下文档:
$ curl -XPUT http://localhost:9200/test/newtype/3 -d '{"text": "one two three four five six"}'
{"ok":true,"_index":"test","_type":"newtype","_id":"3"}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用查询text:hree或text:ive任何其他部分术语进行搜索时,ElasticSearch不会返回此文档.它仅在我搜索确切的术语(如text:two)时返回文档.
我也尝试更改配置文件,以便default_search也使用ngram令牌过滤器,但结果是相同的.我在这里做错了什么,如何纠正?
我们使用十进制数据类型将财务数据存储在SQL Server数据库中,我们需要6-8位精度的十进制数.当我们通过数据访问层将这个值返回到我们的C#服务器时,它将作为十进制数据类型返回.
由于一些我无法控制的设计约束,需要对其进行转换.转换为字符串不是问题.转换为double是因为MS文档说"[从十进制转换为双倍]会产生舍入错误,因为双精度浮点数的有效位数小于小数位数."
作为双重(或字符串),我们可以在完成任何计算后舍入到2位小数,那么进行十进制转换的"正确"方法是什么,以确保在舍入之前我们不会丢失任何精度?
好吧,所以我一直在接受各种关于MVC,EF4,存储库模式,UoW,服务层等的重要信息,现在我将尝试将它们整合在一起.
我的问题是,这些如何分开?
我在想这样的项目:
1)应用程序 - MVC应用程序
2)存储库层3)实体 - EF4 /部分实体类
任何建议都会很棒!!
谢谢,山姆
有没有人知道如何在PHP中按键(日期)对此数组进行排序?
Array
(
[2011-02-16] => Array
(
[date] => 2011-02-16
[num] => 2
)
[2011-02-11] => Array
(
[date] => 2011-02-11
[num] => 0
)
[2011-02-17] => Array
(
[date] => 2011-02-17
[num] => 0
)
[2011-02-18] => Array
(
[date] => 2011-02-18
[num] => 0
)
)
Run Code Online (Sandbox Code Playgroud) 我想将以下函数转换为CUDA。
void fun()
{
for(i = 0; i < terrainGridLength; i++)
{
for(j = 0; j < terrainGridWidth; j++)
{
//CODE of function
}
}
}
Run Code Online (Sandbox Code Playgroud)
我写了这样的功能:
__global__ void fun()
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
int j = blockIdx.y * blockDim.y + threadIdx.y;
if((i < terrainGridLength)&&(j<terrainGridWidth))
{
//CODE of function
}
}
Run Code Online (Sandbox Code Playgroud)
我将terrainGridLength和terrainGridGridWidth都声明为常量,并为它们都分配了值120。我正在调用像
有趣的<<< 30,500 >>>()
但是我没有得到正确的输出。
我写的代码是正确的吗。我对代码的并行执行了解得不多。请向我解释代码将如何工作,如果我犯了任何错误,请更正我。
我需要一个正则表达式来匹配一系列由逗号分隔的一个或多个n位数字,即:
abc12345def返回12345
abc12345,23456def返回12345,23456
到目前为止我得到了这个: \d{5}(,\d{5})*
问题是它在以下情况下也匹配:
123456返回12345,但如果数字长于5,我需要它不匹配.所以我需要5个数字的数字,如果数字更短或更长,那就是不匹配
谢谢
我有这个PHP代码:
$query = "SELECT name, COUNT(message) FROM guestbook_message WHERE name='".$req_user_info['username']."' GROUP BY name";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result))
{
echo "Messages posted: ". $row['COUNT(message)'] ."";
echo "<br />";
}
Run Code Online (Sandbox Code Playgroud)
这将显示用户发布的评论数量.
如果该用户没有发布消息,如何使其返回值?目前显示什么都没有.但我希望它显示"消息发布:0"
有任何想法吗?
我试图将函数范围传递给回调方法.我遇到的问题是我得到了对象范围,它不能让我访问原始函数中的参数和局部变量.除了本地声明的变量和参数之外,我对"this"的理解意味着当前上下文(无论是窗口还是某个对象).[引用Richard Cornford在http://jibbering.com/faq/notes/closures/关于"执行上下文"部分的出色工作].我也理解JavaScript中的变量具有函数作用域(如果它们在函数内声明,则只能从该函数中访问它们).
有了这样的理解,在一个新的环境中,我试图编写一个模式,我为我以前的雇主做了很多,调用异步方法,指定一个回调处理程序并传递我的当前范围,期望它在回调方法中可用.我不认为在我目前的环境中就是这种情况.(披露:我在以前的环境中使用ExtJS ......让我觉得现在我觉得我对框架有点过于惬意,对正在发生的事情作出假设).
我的简单测试代码演示了我正在尝试做什么和什么不起作用.
function myHandler(data, ctx) {
console.log('myHandler(): bar: ' + bar); // <- prob: bar undefined
console.log(JSON.stringify(data));
}
MySvcWrap = {
doWork: function(p1, callback, scope) {
var result = {colors: ['red', 'green'], name:'Jones', what: p1};
if (callback) {
callback.call(scope||this,result, scope);
}
}
}
function lookup() {
var bar = 'food'; // local var
MySvcWrap.doWork('thang', myHandler, this); // scope object is this
}
lookup();
Run Code Online (Sandbox Code Playgroud)
这里的问题是传递给MySvcWrap.doWork的'this'在这种情况下是Window全局对象.我的目的是将函数的执行上下文传递给myHandler.
我试过了什么 如果,而不是'this',我传递一个对象,这是有效的,例如:
function myHandler(data, ctx) {
console.log('myHandler(): …Run Code Online (Sandbox Code Playgroud) 我正在构建一个ASP.NET MVC应用程序,我正在尝试将它部署在一个支持ASP.NET的免费主机(0000free)上.我尝试了一些东西,但没有一个工作(即我浏览到我的网站时只看到目录结构):
通常我只是将html文件放在public_html文件夹中,但我感觉MVC应用程序的部署过程略有不同.我是否必须修改Web.config或其他文件管理器?如何通常部署MVC应用程序(在免费主机上)?
更新:
我了解到主机使用Mono并支持.NET 4.0,但我仍然无法部署.
我有Visual Studio 2010,我使用它的发布功能(即右键单击项目名称并单击发布),我尝试了几件事:
主机论坛的搜索实用程序有点弱,所以我使用谷歌搜索他们的论坛:http://www.google.com/search? q =publish + asp.net + site%3A0000free.com%2Fforum% 2F&即= UTF-8&OE = UTF-8&A Q = T&RLS = org.mozilla:EN-US:官方与客户端= firefox的-A
我一直在阅读Pro ASP.NET MVC框架,他们有一章关于发布,但它没有提供有关发布位置的任何具体信息,这就是他们所说的(这在我的案例中并不是很有帮助) ):
我应该把我的申请放在哪里?
您可以将应用程序部署到服务器上的任何文件夹.当IIS首次安装时,它会自动为c:\ Inetpub\wwwroot \创建一个名为Default Web Site的网站的文件夹,但您不应该有任何义务将应用程序文件放在那里.将应用程序托管在与操作系统不同的物理驱动器上是很常见的(例如,在e:\ websites\example.com中).这完全取决于您,并且可能会受到诸如您计划如何备份服务器等问题的影响.
这是我在尝试查看Index.aspx页面时遇到的错误:
Unrecognized attribute 'targetFramework'. (/home/devarmy/public_html/Web.config line 1)
Description: HTTP 500. Error processing request.
Stack Trace:
System.Configuration.ConfigurationErrorsException: Unrecognized attribute 'targetFramework'. (/home/devarmy/public_html/Web.config …Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×2
php ×2
arrays ×1
asp.net ×1
c# ×1
closures ×1
cuda ×1
javascript ×1
mysql ×1
n-gram ×1
publish ×1
publishing ×1
python ×1
regex ×1
scope ×1